汉诺塔问题是一个典型的递归问题。初略的将其移动看成三步。
第一步,将n-1个移动到辅助木桩中;
第二步,将第n个木桩移到目标木桩;
第三部,将那n-1个移到目标桩上去;
至于如何移动那n-1个那就去先搞n-2个;
各级不断推锅存入栈中,直到走到可以执行的那一步,再弹栈依次执行回来;
具体代码
#include <stdio.h>
void move(int n,char source,char destination,char transit){
if(n<=0){
return;
}else{
move(n-1,source,transit,destination);
printf("%c->%c\n",source,destination);
move(n-1,transit, destination,source);
}
}//汉诺塔递归
int sum(int n){
int j;
if(n==1){
return 1;
}else{
return sum(n-1)+n;
}
} //这是一个求和递归
int main(){
int n,x;
scanf("%d",&n);
move(n,'A','C','B');
x = sum(n);
printf("%d",x);
}