2020-05-23

持续理解ing…

汉诺塔:无论中间怎样移动,只有保证最大的盘子先被移动到目标柱,剩下的才能实现。

解题思路:假设n-1个盘子可以借助三个塔中任意一个!!!,在剩下两个塔之间相互移动。(满足题设条件)则n个盘子只需移动最后一个盘子。

回到题目中:开始的时候n盘全部在A塔上。
1.将n-1盘先移到B塔上(借助c)
将n-1盘看成一个整体,由于追求的是最少的次数,先被移动到目标塔上的应该是最大的盘子,所以若将n-1盘先移到c塔不对。
2.把最后一个盘子移到c塔,A塔上没有盘子了
3.最后将n-1移到c塔上(借助A)
(实现以上三步后的最终状态:将最大的盘子”釜底抽薪“从开始塔先移到目标塔上(这就需要移开那些压在最大盘子上面的盘子且不在目标塔上),在接下来的操作中该最大盘子不需移动。同时n-1个盘子放在了非开始塔,目标塔的中间塔上)

Q1:用递归调用解决汉诺塔,实现移动路径:

移动n个盘子到目标柱C,经过上面三步后,剩下n-1个盘子在B(中间柱)上需要移动到目标柱C上;重复上面类似操作即相当于递归调用:开始柱变为B,剩下n-2个盘子在A(中间柱变为A)上需要移动到目标柱C上;再重复操作后,剩下n-3个盘子在B(中间柱)上需要移到目标柱C上。。。。直至剩下1个盘子在中间柱上需要移动到目标C上。此过程中开始柱,中间柱是随着调用层次发生变化。

Q2:移动的总共步数是:

首先要明确第1,3步移动步数是相等的,只不过其开始柱,中间柱,目标柱不同。–>假设“将n-1个盘子先从A塔移动到B塔(借助C)”所需的次数为f(n-1),则按照上面,“将n个盘子从A移到C塔(借助B)"次数为f(n-1)*2+1,又”将n-1个盘子从A塔移动到B塔(借助C)”所需次数等于“将n-1个盘字从A塔移动C塔(借助B)”的次数,所以“将n个盘子从A移到C(借助B)”所用步数的递推公式:f(n)=f(n-1)*2+1。其中n=1时,f(n)=1.由递推公式易得n个盘子的总移动步数:f(n)=2^n-1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值