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)
#includevoid 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---->%cn", 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); } }



