python汉诺塔非递归

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python汉诺塔非递归相关的知识,希望对你有一定的参考价值。

用python写一个非递归的汉诺塔。图1为题目,题目提示说递归算法可以通过stack class转化为非递归算法,具体怎么转化?图2为stack class的代码,是我们课堂上介绍过的。

参考技术A

python汉诺塔非递归,运用list和function知识的解答

无论stack还是recursion都是从汉诺塔的原理去解决问题,但如果已经想清楚汉诺塔的原理,其实只用把答案print出来就行了

先找规律:

一层:A-->C


两层:A-->B

        -------

         A-->C

        -------

         B-->C


三层:A-->C

         A-->B

         C-->B

        -------

         A-->C

        -------

         B-->A

         B-->C

         A-->C


注意到n层汉诺塔有(2**n) - 1 个步骤,而中间的一步(两个分割线之间)都是“A-->C”,中间的这一步将这一层汉诺塔的解分为上下两个部分

仔细观察,上面一部分是将上一层的解中所有的B,C交换,下面一部分是将上一层的解中所有的A,B交换

例如第二层是:

         A-->B

         A-->C

         B-->C

第三层上部分就将第二层的解的C换成B,B换成C,即得出:

         A-->C

         A-->B

         C-->B

第三层下部分就将第二层的解的A换成B,B换成A,即得出:

         B-->A

         A-->C

         C-->B

这个规律同样适用于第一层,和以后的所有层

然后就好办了,代码如图:

代码

其中convertAB,convertBC就是AB交换,BC交换的函数,这两个函数可以自己定义,用中间变量即可

参考技术B 2021级路过,哭哭 参考技术C 十小时倒计时了楼主写出来没 参考技术D 只要学校选的好 第5个回答  2018-05-12 胖虎:请同学自行完成作业

python_递归实现汉诺塔

  • 在递归的时候,和数学的归纳法一致。

 

 

 

void func( mode)
{
    if(endCondition)
    {
        constExpression         //基本项
    }

    else
    {

        accumrateExpreesion     //归纳项

        mode=expression         //步进表达式

            func(mode)          //调用本身,递归

    }

}

 

以上是关于python汉诺塔非递归的主要内容,如果未能解决你的问题,请参考以下文章

汉诺塔内存分析(python)

Python函数递归之汉诺塔

python数据结构_递归_汉诺塔问题

python_递归实现汉诺塔

Python递归实现汉诺塔

Python 递归与汉诺塔