为了账号安全,请及时绑定邮箱和手机立即绑定

请问在汉诺塔的递归函数中,计算机是怎么计算每一层的?

我完全搞不懂这个汉诺塔递归函数,比如说当n=2时,计算机是怎么计算怎么出结果的?那么n=3时呢?

正在回答

4 回答

是不懂递归么?你可以按代码顺序在脑海里过一边执行的语句段。比如在a函数里调用了a函数(这里用a1,a2表示每一个a函数以区分),a1(未执行完)-->a2(执行完)-->a1(剩下未执行的),如果更多的话:a1(未执行完)-->a2(未执行完)-->a3(未执行完)-->a4(执行完)-->a3(剩下未执行的)-->a2(剩下未执行的)-->a1(剩下未执行的),里面一层执行完了才会执行它外面的一层

1 回复 有任何疑惑可以回复我~
#1

澄心程长 提问者

非常感谢!
2016-12-27 回复 有任何疑惑可以回复我~
#2

澄心程长 提问者 回复 澄心程长 提问者

我后面终于想明白了,见下面的自问自答
2016-12-27 回复 有任何疑惑可以回复我~
#3

yonghaoy 回复 澄心程长 提问者

嗯,我回复后就看到了,,,有时候搞不懂就可以在脑海里或者纸上按照代码执行顺序走一遍,逻辑会清晰很多
2016-12-27 回复 有任何疑惑可以回复我~

请教一下,在n>1之后,move里面的数值顺序为啥改成(a,c,b)了呢?后面一步的(b,a,c)也是不理解

0 回复 有任何疑惑可以回复我~

我终于找到理解的地方了、谢谢、大家、谢谢

0 回复 有任何疑惑可以回复我~

本来不想自问自答的,想了一个中午终于弄明白了,所以回答一下记录自己的思考过程。

当n=1的时候,直接计算出a-->c;

当n=2的时候,

会首先计算move(n-1,a, c, b),即(1,a,c,b),那么符合n=1时的计算法则,即得出a-->b#意思是那个tuple里的第二个元素指向第四个元素。

然后继续执行程序a-->c

最后是计算move(n-1,b,a, c),即(1,b,a, c),这时符合n=1时的计算法则,即得出b-->c#意思是那个tuple里的第二个元素指向第四个元素

当n=3的时候,

计算move(n-1,a, c, b)时就要调用n=2时的结果

然后执行a-->c

最后计算move(n-1,b,a, c)时调用n=2时的结果


也就是说,这个函数的计算方式就是将那个tuple[1](即第二个元素)“-->”tuple[3](即第四个元素),那么如果要表示a-->b的话,就把a放在tuple[1]的位置,b放在tuple[3]的位置;如果要表示b-->c的话,就要把b放在tuple[1]的位置,c放在tuple[3]的位置

5 回复 有任何疑惑可以回复我~
#1

燕刀流

厉害啊,看到你这里我才想明白
2017-01-24 回复 有任何疑惑可以回复我~
#2

这是bug 回复 燕刀流

我还是没看懂,咋回事
2017-02-14 回复 有任何疑惑可以回复我~
#3

Ethan_8

想请问当N=2 的时候,move的参数顺序为啥是a,c,b了呢? 卡在路径这块了,还望不吝赐教!
2017-09-25 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758625    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

请问在汉诺塔的递归函数中,计算机是怎么计算每一层的?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信