Online Compiler C

#include <stdio.h> void hanoi(int n, int from, int to, int temp){ if(n==1){ printf("%d %d %d\n",n,from,to); return; } if(n>1){ hanoi(n-1, from, temp, to); printf("%d %d %d\n",n,from,to); hanoi(n-1, temp, to, from); } } int main() { int x; scanf("%d", &x); hanoi(x, 1, 3, 2); return 0; }
这段代码实现了汉诺塔问题的递归解法。函数 `hanoi` 接收四个参数:盘子数量 `n`、起始柱 `from`、目标柱 `to` 和辅助柱 `temp`。当 `n` 等于1时,直接输出移动步骤;当 `n` 大于1时,先递归移动上面 `n-1` 个盘子到辅助柱,再移动最下面的盘子到目标柱,最后递归将辅助柱上的 `n-1` 个盘子移到目标柱。主函数读取盘子数量并调用 `hanoi`。

- 注意输出格式:题目可能要求每行只输出两个数字(起始柱和目标柱),而你的代码输出了三个数字(包括盘子编号)。检查题目是否要求只输出柱子的编号。
- 递归终止条件中,`if(n==1)` 和 `if(n>1)` 是互斥的,可以只用 `if(n==1)` 处理基本情况,去掉 `if(n>1)` 的判断,让递归自然处理其他情况。