#include<stdio.h>
int m = 0, j = 0;
void p(int x, int z)
{
int t;
t = x;
x = z;
z = t;
m++;
}
void hanoi(int n, char x, char y, char z)
{
if (n == 1)
{
p( x, z);
j++;
}
else {
hanoi(n - 1, x, z, y);
p(x, z);
hanoi(n - 1, y, x, z);
}
}
int main()
{
int n;
scanf_s("%d", &n);
hanoi(n, 'a', 'b', 'c');
printf("%d %d", m, j);
return 0;
}
先说基本结束时出现的几个错误
{
1.函数声明顺序,开始p函数放在了hanoi函数的后面,会出现未出现p函数的标识符,而且形参一定要定义类型
2.顺序改回来后,出现“必须有返回值”的问题,因为开始定义的是int型的函数,改成void型就不需要返回值就可以使用了
3.给函数执行次数的记数;只需要在所有的函数外面定义一个全局变量即可,在函数内部定义++符号,这样函数每次执行一次,全局变量的数值加一
}
涉及到堆栈的问题,hanoi执行递归时,当n==1时执行一次p函数,此时堆栈中储存的状态是上一次进入p函数前的状态,然后弹出栈执行下一条语句,有点难,之后补充补充