zoukankan      html  css  js  c++  java
  • C语言:使用递归解决汉诺塔问题。

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

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 //汉诺塔使用递归可以很轻松但有点抽象的解决。
     4 //汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
     5 void fun(int m,char A,char B,char C)//把A柱上的圆盘移动到B柱
     6 {
     7     if (m == 1) printf("第%d个圆盘从%c柱子移到%c柱子
    ", m, A, B);//如果本来只有一个圆盘的话,从A移到B,就直接移动。//注意输出字符串用%c,
     8     else//如果是两个圆盘,则先把第一个放到C柱,再把第二个放到B柱,再把第一个放到B柱。
     9     {
    10         fun(m - 1, A, C, B);//形参B的位置赋值了C,所以这句输出的是C。
    11         printf("第%d个圆盘从%c柱子移到%c柱子
    ", m, A, B);
    12         fun(m - 1, C, B, A);//输出从C移到B。
    13     }
    14 }
    15 void main()
    16 {
    17     int m;
    18     char A = 'A', B = 'B', C = 'C';
    19     printf("请输入汉诺塔的层数:");
    20     scanf("%d",&m);//注意scanf函数的格式。
    21     fun(m,A,B,C);
    22 }
  • 相关阅读:
    [CSS] prefers-reduced-motion
    [VSCode] Adding Custom Syntax Highlighting to a Theme in VSCode
    Subversion/Git/ReviewBoard工作流程
    oracle hints
    Node.js学习(10)----文件系统fs
    网络子系统41_inet_peer平衡二叉树的删除
    由链表初始化看C语言的二级指针
    挣值管理不是搞数字游戏(4)——让挣值管理实用!
    关于数据库一致改关闭下redo日志文件丢失的处理办法的总结
    Android 操作系统的内存回收机制
  • 原文地址:https://www.cnblogs.com/ming-4/p/10511264.html
Copyright © 2011-2022 走看看