//递归有一明显的缺点是耗用资源较大,此程序输入盘子数量过大时将耗尽CPU资源
#include <STDIO.H>
/************************************************************************/
/* 汉诺塔的解题思路:
若只有一个盘子,则直接将盘子从柱子A移到C;
有N个盘子,借助柱子C将(N-1)个盘子从A移到B,再将第N个盘子从A移到C,
最后将(n-1)个盘子从B借助A移到C,完成。 */
/************************************************************************/
//自定义函数中的参数 n、a、b、c 分别表示盘子的个数、柱子A、柱子B、柱子C
int H_N_T(int n, char a, char b, char c);
int main(void)
{
int n;
char ch1 = 'a';
char ch2 = 'b';
char ch3 = 'c';
printf("请输入汉诺塔盘子的数量:");
scanf("%d", &n);
H_N_T(n, ch1, ch2, ch3); //向函数H_N_T传入实参
return 0;
}
int H_N_T(int n, char a, char b, char c)
{
if (n == 1)
printf("将编号为%d的盘子从柱子%c移到柱子%c\n", n, a, c);
else
{
H_N_T(n-1, a, c, b);
printf("将编号为%d的盘子从柱子%c移到柱子%c\n", n, a, c);
H_N_T(n-1, b, a, c);
}
return 0;
}
C/C++递归之汉诺塔求解
最新推荐文章于 2024-03-27 19:14:47 发布