汉诺塔问题(Hanoi塔)问题的背景传说是编造的吗?

汉诺塔解法,Solution of Hanoi Towers,音标,读音,翻译,英文例句,英语词典
说明:双击或选中下面任意单词,将显示该词的音标、读音、翻译等;选中中文或多个词,将显示翻译。
您的位置: ->
-> 汉诺塔解法
1)&&Solution of Hanoi Towers
汉诺塔解法
2)&&Hanoi Tower
A New Non-Recursive Algorithm of Hanoi Tower P
汉诺塔问题的非递归新解法
The Design and Realization of Hanoi Tower Game Based on JSSE;
基于JSSE的汉诺塔游戏设计与实现
A Non-recursive Algorithm of Hanoi Tower;
汉诺塔问题的非递归算法分析
3)&&tower of hanoi
Instruction Demo Program for Tower of Hanoi Based on J
基于Java的汉诺塔教学演示程序
The Analysis of Cognitive Processes in Solving Tower of H
汉诺塔问题解决的认知过程分析
Tower of Hanoi is a typical problem that can only be solved using recursive method.
汉诺塔问题是典型的只有用递归方法才能解决的问题。
4)&&the Hanoi Towers problem
汉诺(Hanoi)塔
[英][hɑ:'n?i]&&[美][hɑ'n??]
The development of J2ME carton Hanoi with E
使用Eclipse开发J2ME汉诺塔动画
The Designing of Hanoi Towers Animation Game by VB
用VB设计汉诺塔动画游戏
6)&&Non-Recursion Algorithm of Tower-of-Hanoi
汉诺塔非递归算法
补充资料:汉诺塔问题
汉诺塔问题(又称河内塔问题)是根据一个传说形成的一个问题。[编辑]
1.有三根杆子A,B,C。B杆上有若干碟子 2.每次移动一块碟子,小的只能叠在大的上面 3.把所有碟子从B杆全部移到A杆上求移动的方法。
说明:补充资料仅用于学习参考,请勿用于其它任何用途。汉诺塔(hanoi)问题C代码实现--转
汉诺塔问题想必大多数人都不陌生,它是递归思想的一个经典例子,这里只是简述一下:
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
  这里回顾一下递归思想的概念,即将一个复杂问题分解成一系列小的问题,并且这些小问题都具有相同的情形。此时可运用递归的思想来解决更易于理解(但并不一定是效率最高的哦);
  递归算法有两个关键点:1)
有明确的终止条件(通常是分解出来的一系列小问题里最简单的那种情况); 2) 随着递归算法的演进,数据规模在递减;
  另外注意的一点是递归与循环之间的关系,一般来说,用循环能解决的问题用递归也能解决,但能用递归的问题不一定能用循环解决;
  下面看汉诺塔问题的C语言实现代码:
代码文件: hanoi.c
#include "hanoi.h"
void hanoi(int n , char A , char B , char C)
if(<span STYLE="CoLor: # == n)
//最简单的情况,终止递归的条件
printf("移动%c柱上第1个到%c\n",A , C);
hanoi(n-<span STYLE="CoLor: # , A , C , B);
//先将源柱子上的n-1个盘子移到中间介质上
printf("移动%c柱上第%d个到%c\n",A , n , C); //然后将源柱子上的第n个移到目标柱上
hanoi(n-<span STYLE="CoLor: # , B , A , C);
//下面再将中间柱子上的n-1个盘子作为一个新的汉诺塔问题解决
代码文件:& hanoi.h
<span STYLE="CoLor: # #include &stdio.h&
<span STYLE="CoLor: # #include &stdlib.h&
<span STYLE="CoLor: #
<span STYLE="CoLor: # void hanoi(int n , char A , char B , char C);
代码文件 : main.c
#include &stdio.h&
#include &stdlib.h&
#include "hanoi.h"
int main()
int num = <span STYLE="CoLor: #;
printf("请输入总个数:\n");
scanf("%d",&num);
hanoi(num , 'A','B','C');
return <span STYLE="CoLor: #;
编译运行后,2个盘子时,输出如下:
3个盘子时,输出如下:
4个盘子时,输出如下:
另外可以发现操作步骤与总个数有关系,2个时需要操作2的2次方,3个时需要2的3次方,4个时需要2的4次方,由此可推测出传说中的那64个盘子时,总共要移动2的64次方,这对于人工操作来说的确算得上是天文数字了,不信大家拿你的机器试试,呵呵,小心别死机哦,
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Hanoi汉诺塔
汉诺塔问题:
设A,B,C是三个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自上到下,由大到小地叠放在一起。现要求将塔座A上的这一叠圆盘移动到塔座C上 ( 可以借助于塔座B),仍按同样的顺序叠置。规定:每次只能移动一个圆盘,任何时刻不允许将较大的圆盘压在较小的圆盘之上。
例如 &n = 3 时,有:
我们讨论对于n个圆盘,至少需要多少次可以从A移动到C,设 用Tn 来表示这个最小&#20540;。对于n = 0 ,显然 T0 = 0 &,对于 n = 1 , T1 = 1,对于 n = 2 ,T2 = 3
由上图 T3 = 7 。&
我们可以得到一个递归式:
Tn = 2Tn-1 &#43; 1 & & n & 0
我们可以使用递归式计算对于任意一个给定的 正整数 n ,但是当 n 很大时,使用递归式计算就比较耗时了(递归式不是封闭形式的),我们能不能得到一个封闭的形式来计算
Tn呢? 答案是肯定的:
T3 = 2 * 3 &&#43; &1
T4 = 2 * 7 &&#43; &1
T5 = 2 * 15 &#43; 1
T6 = 2 * 31 &#43; 1
看起来好像 Tn = 2的n次方 &- &1 & &n & = 0
我们利用数学归纳法可以很容易的证明其正确性: T0 = 2 的0次方 - 1 = 0 & & &n& 0 时 &Tn = 2 Tn-1 &#43; 1 = 2(2的n-1次方 - 1 )&#43; 1 = 2 的n次方 - 1
利用上式我们就很容易计算移动的最少次数了。
下面我们使用C语言来模拟这个过程:
&span style=&font-size:14&&#include&stdio.h&
int times = 0; //用于记录移动次数
void hanoi(int n,char A,char B,char C)
times += 1;
printf(&Move disk %d from %c to %c\n&,n,A,C);
hanoi(n-1,A,C,B);
printf(&Move disk %d from %c to %c\n&,n,A,C);
hanoi(n-1,B,A,C);
int main()
printf(&请输入圆盘个数n\n&);
scanf(&%d&,&n);
hanoi(n,&#39;A&#39;,&#39;B&#39;,&#39;C&#39;);
printf(&总共需要次数为:%d\n&,times);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:122551次
积分:2399
积分:2399
排名:第16227名
原创:114篇
评论:26条
文章:12篇
阅读:3298
文章:10篇
阅读:39983
(1)(3)(1)(9)(3)(3)(8)(2)(4)(7)(4)(8)(7)(11)(8)(9)(2)(2)(6)(2)(8)(3)(5)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'上高中的时候借同学的文曲星玩,对hanoi(汉诺塔)游戏爱不释手。
但是没有找到规律,总是蒙出来的。后来大学学递归的时候,觉得是听得最认真的一课。连那个胖胖的小C老师,也那么滴可爱和鲜活起来&&
最近在教递归函数,也拿过来做例子。
先废话一下,不知道什么汉诺塔的同学,请参考以下故事:
汉诺塔(又称河内塔)问题是印度的一个古老的传说.传说中,开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆形的金片,最大的
一个在底下,其余一个比一个小,依次叠上去,寺院的僧侣依照一个古老的预言,不知疲倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作
为帮助,但每次只能搬一个,而且大的不能放在小的上面,预言说,当这些金片移动完毕后,世界就会灭亡。
Python代码:
1 count = 1 2
3 &def test(num, src, dst, rest): 4
global count 5
if num & 1: 7
print False 8
elif num == 1: 9
print "%d:\t%s -& %s" % (count, src, dst)10
count += 111
elif num & 1:12
test(num - 1, src, rest, dst)13
test(1, src, dst, rest)14
test(num - 1, rest, dst, src)15 16 17 test(3, 'A', 'C', 'B')
运行结果如下:
顺便说一句,上面的神话传说是真的。
N阶汉诺塔的移动次数公式是:2的N次方减1。
所以64阶的汉诺塔,需要移动的次数是次。
假设那庙里的僧侣每秒移一次,不眠不休,得移4000多亿年。地球才46亿年啊大哥&&恐龙都灭绝好久了&&
阅读(...) 评论()汉诺塔问题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
汉诺塔问题
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 汉诺塔问题c语言程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信