C语言中的汉诺递归调用问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 04:01:37
下面是怎么递归调用的?谢谢了哈,具体解释一下。
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);

这是递归的思想:
hanoi(n-1,one,three,two);/*把one支柱上面的n-1个盘子移到two支柱,three支柱为辅助支柱*/
move(one,three);/*把one支柱上的剩余的一个盘子移到three支柱上*/
hanoi(n-1,two,one,three);/*把剩余n-1个盘子从two支柱移到three支柱的盘子上,one支柱为辅助支柱*/

需要注意的是:
每次hanoi函数都会按照这个思想来做,例如n-1的时候:
hanoi(n-2,one,two,three);/*把one支柱上面的n-2个盘子移到three支柱,two支柱为辅助支柱*/
move(one,two);/*把one支柱上的剩余的一个盘子移到two支柱上*/
hanoi(n-2,three,one,two);/*把剩余n-2个盘子从three支柱移到two支柱的盘子上,one支柱为辅助支柱*/

....
....
....

你这个程序是递归程序的一部分吧。
我想完整的应该这么写:

void hanoi(int n,one,two,three){
if(n>1){
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}else{
move(one,three);
}
}