狼之道 发表于 2015-8-31 21:33:41

移动顺序是先把x-->y借助z(递归调用)
然后把最后一个x-->z(非递归,一条语句)
最后把y-->z(递归调用)

y290176346 发表于 2015-10-8 22:02:42

感谢楼主谢谢你 学习了

鱼C工作室.YCGZS 发表于 2015-12-6 11:19:48

汉诺塔!

Damn_it 发表于 2016-11-26 18:32:57

你在纸上画一下它的流程,就知道它的步骤了,一般情况汉诺塔都用双递归

流月飞星 发表于 2016-12-6 10:57:11

厉害了

流月飞星 发表于 2016-12-7 16:53:33

{:10_245:}

hygboy 发表于 2017-4-13 23:59:59

我来给你用print分析下整个递归过程,我自己也才开始学,所以想出了整个办法,应该没问题了,过程非常详细了,整个帖子是2014年的也不指望还有讲奖赏了,为后来的同志们方便理解吧,包程序拷贝执行了对着看,过程就很清楚了
def hanoi(n,a,b,c):
    print('------')
    print(n,a,b,c)
    print('------')
    if n == 1:
      print('aaaaaaaa')
      print(n,a,b,c)
      print(a,'--->',c)
      print('aaaaaaa')
    else:
      print('bbbbbbbbb')
      hanoi(n-1,a,c,b)
      print(n-1,a,c,b)
      print(a,'---->',c)
      print('bbbbbbb')
      hanoi(n-1,b,a,c)
      print(n-1,b,a,c)
      print('ccccccccc')
n = int (input('请输入汉罗塔的层数:'))
hanoi(n,'x','y','z')

请输入汉罗塔的层数:3
------
3 x y z
------
bbbbbbbbb
------
2 x z y
------
bbbbbbbbb
------
1 x y z
------
aaaaaaaa
1 x y z
x ---> z
aaaaaaa
1 x y z
x ----> y
bbbbbbb
------
1 z x y
------
aaaaaaaa
1 z x y
z ---> y
aaaaaaa
1 z x y
ccccccccc
2 x z y
x ----> z
bbbbbbb
------
2 y x z
------
bbbbbbbbb
------
1 y z x
------
aaaaaaaa
1 y z x
y ---> x
aaaaaaa
1 y z x
y ----> z
bbbbbbb
------
1 x y z
------
aaaaaaaa
1 x y z
x ---> z
aaaaaaa
1 x y z
ccccccccc
2 y x z
ccccccccc
页: 1 [2]
查看完整版本: 关于汉诺塔