如何理解汉诺塔的递归?

作者:魏闪
链接:https://www.zhihu.com/question/24385418/answer/107705695
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一个环:
Step1.将最大的环从A移动到C
A -> C

两个环:
Step1.把除了最大的环之外的环,从A移动到B
A -> B
Step2.将最大的环从A移动到C
A -> C
Step3.把除了最大的环之外的环,从B移动到C
B -> C

三个环:
Step1.把除了最大的环之外的环,从A移动到B
A -> C
A -> B
C -> B
Step2.将最大的环从A移动到C
A -> C
Step3.把除了最大的环之外的环,从B移动到C
B -> A
B -> C
A -> C

所以其实是这样抽象成三个步骤的~
这个时候,可以放张图了
<img src="https://pic4.zhimg.com/50/9e868e86b16f18d153bff7811e94367a_hd.jpg" data-rawwidth="555" data-rawheight="290" class="origin_image zh-lightbox-thumb" width="555" data-original="https://pic4.zhimg.com/9e868e86b16f18d153bff7811e94367a_r.jpg">
(a)是初始状态,也就是递归的起点,我们假设n=4, move(4,A,B,C)还是请参考现在最高的分的代码哈~写这个是帮助大家更清楚那个让人压力大的(“抽象”)两个字,哈哈
<这个函数要实现的功能是把n个环从A按照一定的规则,借助B,移动到C>
(b)是step1完成的时候的状态,已经将所有的n-1,这里也就是3个环从A挪到了B
<第一处递归,move(n-1,A,C,B) 这个函数要实现将n-1个环从A,借助C,移动到B>
(c)是step2,此时需要将第n个,也就是第四个最大的环从A挪到C
<move(1,A,B,C),或者干脆直接print("A -> C")>
(d)是step3,此时需要将B上面的n-1个环从B挪到C<第二处递归>
<第二处递归,move(n-1,B,A,C) 这个函数要实现将n-1个环从B,借助A,移动到C>

转载于:https://www.cnblogs.com/wsw-seu/p/8807616.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值