汉诺塔递归的空间复杂度_四柱汉诺塔问题(python代码实现)

在学习递归的过程中,相信每一个人都会遇到“汉诺塔”的求解问题,递归作为一种优雅的解法,可以在实现过程中巧妙的契合你的描述语言,所以三柱汉诺塔作为最基本的汉诺塔问题,很容易得解。但是当我们把柱数提高到4了,又该怎么解决了。


设F[n]为所求的最小步数,显然,当n=1时,F[n]=1;当n=2时,F[n]=3;如同经典汉诺塔一样,我们将移完盘子的任务分为三步:

  1. 将x(
    )个盘子从a柱子上依靠b,d柱子移动到c柱子上,这个过程需要的步数为
  2. 将a柱上剩下的n-x个盘依靠b柱移到d柱。这个过程需要的步数为
    。(这个通项公式可以通过数学归纳法来求得,你可以写程序找规律,事实上n柱汉诺塔的公式在数学上好像已经得到解决。)
  3. 将c柱上的x个盘依靠a,b柱移到d柱上,这个过程需要的步数为

故完成任务所需要的总的步数 :

但这还没有达到要求,题目中要求的是求最少的步数,易知上式,随着x的不同取值,对于同一个n,也会得出不同的F[n]。即实际该问题的答案应该

,其中
,我们可以用循环的方式,遍历x的各个取值,取x的各个取值中的F[n]的最小值。
MOOC数据结构与算法Python版-第五周编程作业_Python_suxiaorui的博客-CSDN博客​blog.csdn.net
a2c74ab2ed41d0549b7efba5a00aef05.png
#python迭代实现


另一种解法,并加上动态规划,减少时间复杂度:

def 

有用的就点个赞吧~~

算法小白,码字不易。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值