C语言汉诺塔问题可以简单抽象为;现有A,B,C三根柱子,其中,A上有64个圆盘(由上到下,大小依次递增),借助B柱子,将A中的圆盘移动到C中。(每次只能移动一次,且顺序由上到下,大小依次递增)
主要思路:函数递归;其中,x表示圆盘出发的柱子,y表示圆盘经过的柱子,z表示圆盘想要到达的柱子
步骤:先将n-1个盘移动经过C移动到B, 再将B中n-1个圆盘通过C移动到A,依次递归,利用if判断条件跳出函数,可忽略中间过程。
hanoi(int n, char x, char y, char z)
#include<stdio.h>
void hanoi(int n, char x, char y, char z);
void move(char x, char z);
int main(void)
{
char A, B, C;
int n;
printf("输入盘子的数量");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
void move(char x, char z)
{
printf("%c---->%c\n", x, z);
}
void hanoi(int n, char x, char y, char z)
{
if (n == 1)
move(x, z); //还有一个盘子时,直接把盘子从第一跟柱子移动到第三根柱子
else
{
hanoi(n - 1, x, z, y);
move(x, z);
hanoi(n - 1, y, x, z);
}
}