一、代码
#include<stdio.h> void hanoi(int n,char A,char B,char C)//这里的ABC始终是形参 { if(n==1)//移动 { printf("%c->%c\n",A,C);//第一个参数是源,第二个参数是目标 } else { //这里的ABC是实参 hanoi(n-1,A,C,B);//将上面的n-1从A移到B,根据上面的移动的参数,A是源,B是目标。 hanoi(1,A,B,C);//将在最后一个直接移动 hanoi(n-1,B,A,C);//将刚才移动的n-1,从B移动到C } } int main() { int n; scanf("%d",&n); hanoi(n,'A','B','C');//把n个汉诺塔从A(源)移动到C(目标); }
二、总结
1.先把n-1从A(源)移到B(目标)(借助C),再把最后一块直接移动到C。(但是上一个步骤中,如何把n-1移动到B?这又是一个汉诺塔)。然后把n-1从B移动到C(借助A),那么如何实现?这又是一个汉诺塔
2.注意递归中,形参和“实参”。