C语言练习篇-4河内之塔

原创 2016年06月01日 21:20:26

练习:创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日来临之时。

解法:如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,其实就是进入程式的递回处理。事实上,若有n个盘子,则移动完毕所需之次数为2^n - 1,所以当盘数为64时,则64所需次数为:2 - 1 = 18446744073709551615为5.05390248594782e+16年,也就是约5000世纪 ,如果对这数字没什幺概念,就假设每秒钟搬一个盘子好了,也要约5850亿年左右。

#include <stdio.h>
void hanoi(int n, char a, char b, char c){
    if (n == 1) {
        printf("Move dish %d form %c to %c \n", n, a, c);
    }else {
        hanoi(n - 1, a, c, b);
        printf("Move dish %d form %c to %c \n", n, a, c);
        hanoi(n - 1, b, a, c);
    }
}

int main() {
    int n = 0;
    printf("please enter dish number:");
    scanf("%d",&n);
    hanoi(n, 'A', 'B', 'C');
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

四柱加强版汉诺塔HanoiTower----是甜蜜还是烦恼

我想很多人第一次学习递归的时候,老师或者书本上可能会举汉诺塔的例子。 但是今天,我们讨论的重点不是简单的汉诺塔算法,而是三柱汉诺塔的延伸。先来看看经典的三柱汉诺塔。   一、三柱汉诺...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年01月18日 15:48
  • 1665

问题 C 算法3-5:n阶Hanoi塔问题

题目描述 假设有三个分别命名为X、Y和Z的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,...,n的圆盘。现要求将X轴上的n个圆盘移至塔座Z上并仍按同样顺序叠排,圆盘移动时...
  • qq_32126633
  • qq_32126633
  • 2016年10月24日 23:31
  • 1246

汉诺塔(Hanoi)递归算法笔记记录

汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图找了张5个的,意思一样)。有一个和尚想把这64个盘子从A座移到B座,但每次只...
  • dingchenxixi
  • dingchenxixi
  • 2016年09月06日 08:29
  • 589

hanoi塔问题解析(一) c++实现

什么是hanoi塔? 汉诺塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子...
  • woshinannan741
  • woshinannan741
  • 2016年10月14日 19:10
  • 3075

用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C

用 递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,...
  • u011329762
  • u011329762
  • 2014年11月11日 18:31
  • 7197

双色Hanoi塔问题

双色Hanoi塔问题 【问题描述】       设A、B、C是3 个塔座。开始时,在塔座A 上有一叠共n 个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,……,n...
  • clover_hxy
  • clover_hxy
  • 2015年12月04日 19:19
  • 1656

n阶汉诺塔盘问题(Hanoi)

n阶汉诺塔盘问题
  • lvdezhou
  • lvdezhou
  • 2015年12月11日 13:32
  • 702

汉诺塔(河内塔)问题

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序...
  • firechungelaile
  • firechungelaile
  • 2014年09月27日 13:01
  • 1587

(原创)Hanoi塔问题的递归方法与非递归方法(java实现)

本文讨论了Hanoi塔问题的递归方法与非递归方法,给出了java实现的代码,并比较了它们的效率。...
  • JeCode
  • JeCode
  • 2015年11月18日 00:13
  • 2993

递归算法——Hanoi(汉诺)问题(Java实现&C语言实现)

某寺庙前有三根柱子A、B、C,开始时A柱上有n个盘子,盘子大小不等,大的在下、小的在上(下图所示)。有一老和尚想把这n个盘子从A柱移到C柱上,但每次只允许移动一个盘子,且在移动过程序中每根柱子上都始终...
  • zimou5581
  • zimou5581
  • 2016年10月13日 19:52
  • 1153
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言练习篇-4河内之塔
举报原因:
原因补充:

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