【第22期】观点:IT 行业加班,到底有没有价值?

休闲数学-汉诺塔

原创 2016年08月30日 14:00:08

名称:汉诺塔 (河内塔、Tower of hanoi)

发明者:爱德华·卢卡斯

故事来源:

印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

图片:

汉诺塔

游戏规则:

1、一次一个:一次只能移动一个圆 环;
2、大不压小:大圆环不能压在小圆 环上,也就是小圆环必须在大圆环上面。

操作过程:

汉诺塔
一片移动1次,两片移动3次,三片移动7次 总结 用递归来计算过程和步数
数学公式
f(1)=1 f(2)=3 f(3)=7 f(4)=?
⇒ f(3)=f(2)*2+1
⇒ f(n)=f(n-1)*2+1
⇒ f(4)=15
||得出同下公式
f(n)=2^n-1 2的n次方-1

python:

`git@code.csdn.net:snippets/1859264.git`
<php>
 # 利用递归函数移动汉诺塔:
def move(n, a, b, c):
if n == 1:
    print('move', a, '-->', c)
    return
move(n-1, a, c, b)
print('move', a, '-->', c)
move(n-1, b, a, c)

move(2, 'A', 'B', 'C')    
</php>
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

BZOJ 1019 汉诺塔 数学 递推

Description  汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上, 大的在下面,小的在上面,形成了一个塔状的锥形体。  对汉诺塔的一次...

算法 - 三柱汉诺塔的最小步数(C++)

#include &lt;iostream&gt; using namespace std; int f3(int n) { int f3n = 0; if(f3n) { return f3n; } else { if(n == 1) { f3n == 1; return n; } f3n = 2 * f3(n - 1) + 1; return f3n; } } int main() { cout &lt;&lt; f3(16) &lt;&lt; endl;

杭电--1995--汉诺塔V--数学题

汉诺塔V Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi...

浅谈递归算法之汉诺塔

 递归算法就是一个函数通过不断对自己的调用而求得最终结果的一种思维巧妙的算法.无论在哪种语言里,汉诺塔都是递归算法的经典题目.   1.题目简介 有三根相邻的柱子,左边的柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到右边的柱子上,并且每次移动同一根柱子上都不能出现大的盘子在小的盘子上方.  <img src="

杭电--1207--汉诺塔II--数学题

汉诺塔II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)