典型递归的思想解决汉诺塔问题
2017-04-13 16:29
197 查看
def hanoi(a,b,c,n):#借助b柱子将a柱子的盘子移动到c柱子 if(n==1):#只有一个盘子,直接完成移动 print(a,'->',c) else: hanoi(a, c, b, n-1)#借助c柱子先将n-1个盘子移动到b柱子 print(a,'->',c)#再将a上最后一个盘子移动到c柱子 hanoi(b, a, c, n-1)#再借助a柱子将b柱子上的n-1个盘子移动到c柱子 hanoi('a', 'b', 'c', 3)
这里用到了递归的思想,但是也要考虑整体思想,当初始问题的a上的盘子数大于等于2时,我们完全可以将其看作是两部分,第一部分是除了最大盘子之外的集合,第二部分是最大盘子,然后进行递归。
移动步数推导:
移动k+1个盘子需要的次数与移动k个盘子的次数之间的关系是:
a[k+1] = a[k] + 1+ a[k] = 2a[k] + 1
所以a[k]+1 + 1 = 2*(a[k] + 1)【这是个等比数列高中学过的】
即a[k + 1] = (a[1] +1)* 2^n-1 = 2^n 因此a[k] = 2^n - 1
至此,证明完毕。
相关文章推荐
- 递归思想解决汉诺塔的问题
- 递归和分治思想的典型应用—汉诺塔问题
- 递归和分治思想的典型应用—汉诺塔问题
- 约瑟夫环之二(用递归的思想解决Josephus问题)
- 递归思想分析解决问题
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 汉诺塔问题的递归解决方法
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 算法——递归思想解决排列组合问题
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 递归思想解决经典问题
- 不用递归解决汉诺塔问题
- 递归思想解决小问题
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 利用递归思想解决问题
- 利用递归思想解决问题
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 递归解决汉诺塔问题解法java代码