谁能告诉我关于汉诺塔递归算法的详细运行步骤(c\c++)?

来源:百度知道 编辑:UC知道 时间:2024/04/29 00:25:30
程序中用了两个递归函数,谁能告诉我程序运行具体的流程,越详细越好

void move(char x,char y){
printf("%c-->%c\n",x,y);
}

void hanoi(int n,char one,char two,char three){
/*将n个盘从one座借助two座,移到three座*/
if(n==1) move(one,three);
else{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}

main(){
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("The step to moving %3d diskes:\n",m);
hanoi(m,'A','B','C');
}

汉诺塔的规则是把N个盘子从A柱挪到C柱(假设是这样)
那末,我们要做的就是把N-1个盘子从A柱挪到B柱,再把1个盘子从A柱挪到C柱,再把N-1个盘子从B柱挪到C柱。
当运行到N-1的时候,N就代表N-1,这时再把N-2个盘子从开始柱挪到临时柱,再把1个主子从开始柱挪到结束柱,再把n-2个柱子从临时柱挪到结束柱。不停的调用自身,直到调用的程序的N=1的时候……
说了这些,不知道阁下懂不懂。