Онлайн компилятор C

#include <stdio.h> void hanoi(int n, int from, int to, int temp) { printf("1"); } int main() { void hanoi(2,1,1,2); return 0; }
这段代码试图实现汉诺塔问题的递归解法,但目前有两个主要问题。

首先,`hanoi`函数内部只打印了数字1,没有实现任何移动盘子的逻辑,也没有递归调用自身来分解问题。汉诺塔的核心思路是将n个盘子从源柱移动到目标柱,需要借助辅助柱,并且要递归处理n-1个盘子的子问题。

其次,在`main`函数中调用`hanoi`的方式是错误的。你写成了`void hanoi(2,1,1,2)`,这像是函数声明而不是调用。正确的函数调用应该直接写函数名和参数,不需要在前面加`void`。

- 检查`hanoi`函数体:它应该包含递归终止条件(当n为1时直接移动),以及递归调用自身来处理n-1个盘子的移动。目前函数只打印了1,没有实现任何移动或递归。
- 检查`main`中的调用语法:去掉`void`,直接写`hanoi(2,1,1,2);`。同时注意参数含义:通常第一个参数是盘子数,后面三个参数分别代表源柱、目标柱和辅助柱。你传入的`from`和`to`都是1,这会导致逻辑问题,因为源和目标不能相同。