成都创新互联网站制作重庆分公司

汉若塔函数python,编写函数实现汉诺塔

关于python递归函数实现汉诺塔

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

创新互联公司致力于做网站、成都网站制作,成都网站设计,集团网站建设等服务标准化,推过标准化降低中小企业的建站的成本,并持续提升建站的定制化服务水平进行质量交付,让企业网站从市场竞争中脱颖而出。 选择创新互联公司,就选择了安全、稳定、美观的网站建设服务!

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

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

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

python汉诺塔算法如何添加统计移动次数的代码?

方案1:命令窗口运行文件方式

s=0

def move(n,a,b,c):

global s

if n==1:

s=s+1

print(a,'--',c)

return 

move(n-1,a,c,b)

move(1,a,b,c)

move(n-1,b,a,c)

n = int(input('num: '))

move(n,'A','B','C')

print('total: %s'%s)

方案2:交互模式(建立函数文件jichu.py,在交互窗口调用文件中函数move)

s=0

def move(n,a,b,c):

global s

if n==1:

s=s+1

print(a,'--',c,'\t%s' % s)

return 

move(n-1,a,c,b)

move(1,a,b,c)

move(n-1,b,a,c)

python语言汉诺塔(hanoi)问题

move(n, A, B) 就表示把第n个饼从A柱移到B柱, 其中step是个全局变量,用来记录移动的次数。

hanoi(n, A, B, C) 就是你所问的实现递归的函数, 表示把n个饼从A柱通过B柱移到C柱。

其中 n==1 是递归的最基本的情况, 如果只有一个饼就直接移到目标柱子即可。

不然呢我们就先把最上面n-1个饼从A通过C移到B,注意这里移到的是B柱哦~, 然后把第n块饼移到C柱,再重新把之前移到B柱上的n-1个饼通过A移动到C。

整个过程挺直白的,想通了就明白了

汉诺塔python

Solves the Towers of Hanoi problem on n discs. The discs are labeled

* in increasing order of size from 1 to n and the poles are labeled

* A, B, and C.

*

* % java Hanoi 3

* Move disc 1 from A to C

* Move disc 2 from A to B

* Move disc 1 from C to B

* Move disc 3 from A to C

* Move disc 1 from B to A

* Move disc 2 from B to C

* Move disc 1 from A to C

以上为模拟结果,从结果中找递归规律,你的疑点也能得到解决

如何理解这段汉诺塔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解决汉诺塔问题?

解汉诺塔最简单的做法就是递归:

类似如何将大象装进冰箱:1)将冰箱门打开;2)把大大象放进去;3)把冰箱门关上……

我们将所有的盘都在同一个杆上从大到小排列视为【完美状态】,那么,目标就是将最大盘片为n的完美状态从a杆移到b杆,套用装大象的思路,这个问题同样是三步:

1)把n-1的完美状态移到另一个杆上;

2)把n移到目标杆上;

3)把n-1的完美状态移到目标杆上。

如下:


新闻名称:汉若塔函数python,编写函数实现汉诺塔
分享URL:http://cxhlcq.com/article/dsecdpp.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部