C语言:使用递归解决汉诺塔问题。

本文介绍了一个古老的印度益智玩具——汉诺塔,通过递归算法详细解析了如何将不同大小的圆盘从一柱子移动到另一柱子的规则与实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着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柱子\n", 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柱子\n", 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 }

 

转载于:https://www.cnblogs.com/ming-4/p/10511264.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值