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; } 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; }
这段代码实现了汉诺塔问题的递归解法。程序从标准输入读取盘子数量,然后输出每一步移动的盘子编号、源柱和目标柱。

你的代码逻辑基本正确,但输出格式可能不符合常见要求。通常汉诺塔问题只需要输出移动的源柱和目标柱,不需要输出盘子编号。不过具体要看题目要求。

- 检查递归终止条件:当只有一个盘子时,直接移动。你的代码在n==1时输出了盘子编号、源柱和目标柱,但其他递归调用也输出了盘子编号。如果题目只要求输出柱子编号,那么盘子编号是多余的。
- 注意递归调用的参数顺序:你的递归调用中,temp和to参数交换正确,但需要确认每次移动后三个柱子的角色是否准确对应。