【C语言】汉诺塔问题。

 

汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘,如图7-3所示。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放到第二根柱子上,并且规定,每次只能移动一个圆盘,在小圆盘上不能放大圆盘。有人预言说,这件事完成时宇宙会在一瞬间闪电式毁灭,也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。
**输入格式要求:"%d" 提示信息:"Input the number of disks:"
**输出格式要求:"Steps of moving %d disks from A to B by means of C:\n" "Move %d: from %c to %c\n"
程序运行示例如下:
Input the number of disks:3
Steps of moving 3 disks from A to B by means of C:
Move 1: from A to B
Move 2: from A to C
Move 1: from B to C
Move 3: from A to B
Move 1: from C to A
Move 2: from C to B
Move 1: from A to B
 
#include<stdio.h>
int i = 1;//定义全局变量,每次调用后加1
void Hanoi(int n, char A, char B, char C)
{
     
    if (n == 1)//如果只有一个直接从A移到B   "%2d-(%2d):%c==>%c\n"
    {
    printf("Move %d: from %c to %c\n",n,A,B);
     
    }
    else
    {
   Hanoi(n - 1, A, C, B);//把n - 1个从A移到C借助B
     
    printf("Move %d: from %c to %c\n",n, A, B);
    Hanoi(n - 1, C, B, A);//把n - 1个从C移到B借助A
        
    }
     
}
int main()
{
    int n;
    char A = 'A'; //定义ABC表示三个柱子
    char B = 'B';
    char C = 'C';
    printf("Input the number of disks:");
    scanf("%d", &n);
    printf("Steps of moving %d disks from A to B by means of C:\n",n);
    Hanoi(n, A, B, C);
     
    return 0;
}

 

 

  • 23
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白驹_过隙

听说打赏的都进了福布斯排行榜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值