首页 > 后端开发 > 正文

python汉诺塔 Python汉诺塔递归问题

2024-01-06 11:28:26 | 我爱编程网

今天我爱编程网小编为大家带来了python汉诺塔 Python汉诺塔递归问题,希望能帮助到大家,一起来看看吧!

本文目录一览:

python汉诺塔 Python汉诺塔递归问题

python汉诺塔

仔细看一下 5-7行调用 move 时候的参数顺序, 不是你说的那样没有变:

#5 的含义是将 A 上的前 n-1 个移动到 B

#6 : 将 A 最后一个移动到 C

#7: 将 B 上的 n-1 (即#5 从 A 移动过来的 n-1) 个移动到 C

python汉诺塔 Python汉诺塔递归问题

python汉诺塔非递归

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交换的函数,这两个函数可以自己定义,用中间变量即可

python汉诺塔 Python汉诺塔递归问题

Python汉诺塔递归问题

递归方法有些时候是不太好理解,不过递归的意义就是把解决问题n变成解决n-1的问题,最终变成解决1个问题。

假设有n个盘子,从上到下依次编号,最下面的盘子编号是大写的N。托盘分别是x,y,z。要把所有盘子从x移动到z。

前面几行代码就不解释了,很容易理解。

第五行,如果只有一个盘子,就直接从x移动到z。

第七行,如果不只一个盘子,先把上面n-1个盘子从x移动到y。

第八行,再把N号盘子从x移动到z。

第九行,再把刚才那n-1个盘子从y移动到z。

至于那n-1个盘子是怎么移动的,再次调用这个函数,把问题变成n-2个盘子加1个盘子的问题。

以上就是我爱编程网整理的python汉诺塔 Python汉诺塔递归问题相关内容,想要了解更多信息,敬请查阅我爱编程网。
与“python汉诺塔 Python汉诺塔递归问题”相关推荐