2 aaawei1996 AAAwei1996 于 2017.01.16 22:00 提问

汉诺塔问题的递归思想

今天一天主要研究递归问题和递归思想。在网上查了点关于递归思想的程序题看,前几个求阶乘,求和以及求费波拉契数列的递归思想都很简单。但是汉诺塔问题却解决不了。查了查网上的代码,虽然能看懂思想,但是每一步是如何实现递图片说明归的却非常的迷,哪位大神可以帮助我一下,谢谢啦

3个回答

caozhy
caozhy   Ds   Rxr 2017.01.16 23:48

对于汉诺塔,递归在这里体现了回溯的思想。递归使得每一个步骤可以再分裂出不同的后续步骤,通过本程序状态的保留,在遍历某种可能后回到这个执行点,继续下一个。
和汉诺塔类似,迷宫算法、广度优先的遍历等也体现了回溯的思想。昨天也曾经回答过你的问题,如果问题得到解决,请及时采纳,举手之劳,谢谢。

AAAwei1996
AAAwei1996 谢谢,但是汉诺塔每一步是如何实现的?每一步转移,能说的详细一点么?谢谢啦
11 个月之前 回复
anqi0819
anqi0819   2017.01.17 10:04

比如 你调用函数 fun() 在函数fun()里面调用了别的函数aa()。。 所谓的递归就是调用的函数名相同,和fun()调用aa()并没有什么区别。函数在调用之前要入栈。
不执行到return是不会返回的。每执行一个函数就会开辟一个栈空间。调用别的函数的时候会有一个指针指向另一个函数栈。

AAAwei1996
AAAwei1996   2017.01.16 22:48

我想知道递归过程中每个盘子是如何移动的(这是如何体现递归思想的?)

anqi0819
anqi0819 给你推荐一本书叫C和指针。看完了之后你再看算法。递归就是调用函数名相同的函数(外界大部分都是说自己调用自己),看完那两本书你在想想函数调用在计算机是怎么实现的就明白了。
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!