Онлайн компилятор 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, to, temp); printf("%d %d %d/n",temp,from,to); hanoi(n-1, to,from,temp); } int main() { int x; scanf("%d",&x); hanoi(x); return 0; }
这段代码试图实现汉诺塔问题的递归解法,但存在几个问题。

首先,`hanoi`函数被定义为接受4个参数,但在`main`中调用时只传了一个参数`x`,这会导致编译错误。其次,递归逻辑和输出格式也有问题。

- 在`main`中调用`hanoi(x)`时,需要提供完整的4个参数,例如`hanoi(x, 1, 3, 2)`,表示从柱子1移动到柱子3,借助柱子2。
- 递归内部,当`n>1`时,正确的步骤应该是:先将n-1个盘子从`from`借助`to`移到`temp`,然后移动第n个盘子从`from`到`to`,最后将n-1个盘子从`temp`借助`from`移到`to`。你的代码中递归调用参数顺序有误,导致逻辑不正确。
- 输出格式中使用了`/n`,这应该是换行符`\n`,而不是斜杠。