zoukankan      html  css  js  c++  java
  • 汉诺塔完整程序小结

    汉诺塔问题
        汉诺塔的算法就3个步骤:
       第一,把a上的n-1个盘通过c移动到b。     第二,把a上的最下面的盘移到c。
       第三,因为n-1个盘全在b上了,     所以把b当做a重复以上步骤就好了。所以算法看起来就简单多了。     不过,思考过程还是很痛苦的,难以理解。递归中会保存数据的好处在这里又得到体现

    //
    2014-4-2 23:54 汉诺塔完整程序 //比较难于理解,要反复琢磨 # include <stdio.h> void hannuota(int n, char A, char B, char C)//此函数代码比较难懂,好好反复想明白 { /*如果是1个盘子       直接将A柱子上的盘子从A移到C 否则 先将A柱子上的n-1个盘子借助C移到B 然后将A柱子上的盘子从A移到到C 最后将B柱子上的n-1个盘子借助A移到C */ if (1 == n ) { printf("将编号为%d的盘子直接从%c柱子移到%c柱子 ", n, A, C); } else { hannuota(n-1, A, C, B); printf("将编号为%d的盘子直接从%c柱子移到%c柱子 ", n, A, C); hannuota(n-1, B, A, C); } } int main(void) { char ch1 = 'A'; char ch2 = 'B'; char ch3 = 'C'; int n; printf("请输入要移动盘子的个数: "); scanf("%d", &n); hannuota(n, 'A', 'B', 'C'); }
    补充:
    汉诺塔问题(又称河内塔问题)是根据一个传说形成的一个问题:
    有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆:
    1.每次只能移动一个圆盘;
    2.大盘不能叠在小盘上面.
    可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则.
  • 相关阅读:
    看《你必须知道的.NET》有感工厂模式的另类解读
    学习笔记:PDO
    学习笔记:mysqli预处理和事务处理
    学习笔记:mysql
    学习笔记:基础+文件操作(上传|下载)+面向对象+xml
    学习笔记:php+mysql
    学习及求职心得|PHP学习心得|IT从业者的几点体会
    flash做登录页传递值给asp.net,其他语言的也可以参照下
    rpm安装依赖问题
    让进程在后台可靠运行
  • 原文地址:https://www.cnblogs.com/gqs92/p/6802418.html
Copyright © 2011-2022 走看看