新手对汉诺塔次数的心得巩固

兴趣所在,刚接触c#,目前自学中,课堂中遇到了汉诺塔次数的问题,让用递归的思想解决。刚开始我也是在草稿纸上画来画去,还画错了,后面才弄明白。但是昨天晚上躺下后,我又在想能不能利用整体的思想,简化一下思考路径,自己想出了个思路,原来是早就有的所谓冰箱装大象的方法。不过我还是写下自己的思考方法,巩固一下,顺便发出自己的第一个帖子😁

以三个移动为例,目标就是把1、2、3从A柱全部挪到C柱。其实这里把三个全部从A挪到B的次数是一样的,也就是次数和位置无关,这点是这个整体思路的关键。

整体思想就是,把第n-1及以上的珠子全部看做一个整体,例子中就是把1、2看做一个整体,所以就变成了解两个珠子的问题。

那么第一步,就是要要把1、2的整体挪到B柱上,那么此时产生的步数为f(2)。

第二步,把1挪到C上,此时步数为1步。总步数变为f(2)+1。

第三步,把1、2整体再挪到C上。根据规则,因为1是最大的,只要1到位后,即可以把1看做成基座的一部分了,此时的问题就相当于把1、2从B挪到C了。前面说过,位置和次数无关,那么要实现1、2从B到C,步数也是f(2)。此时,总步数为f(2)+1+f(2),整理后为f(3)=2*f(2)+1。

同理可得,

f(4)=f(3)+1+f(3)=2*f(3)+1

f(5)=f(4)+1+f(4)=2*f(4)+1

f(n)=2*f(n-1)+1

道阻且坚,继续加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值