C编程:汉诺塔问题:
【问题】想问一下,程序是怎么运行到
Hanoi(n-1,a,c,b);
下面的这两句的呢?
count
printf("%d Move dish %d : %c------>%c ",count,n,a,b);
我感觉程序永远都到不了这两句啊!
【代码】
#include
static count=0;
int Hanoi(int n,char a,char b,char c){
if(n>0){
Hanoi(n-1,a,c,b);
count ;
printf("%d Move dish %d : %c------>%c ",count,n,a,b);
Hanoi(n-1,c,b,a);
}
return 0;
}
int main(){
int n=3;
Hanoi(n,'A','B','C');
return 0;
}
Hanoi(3,a,c,b)->Hanoi(2,a,c,b)->Hanoi(1,a,c,b)->Hanoi(0,a,c,b)//当n递减到0时,函数不再递归
->a->c ->。
。。。。
->Hanoi(1,c,b,a)->。。。。
->。
。。。。
->。。。。。
->a->c
->Hanoi(2,c,b,a)->Hanoi(1,a,c,b)->。
。。。
->a->c->。。。。
->Hanoi(1,c,b,a)->。
。。。
//总之只要有1个Hanoi()函数,就产生2个Hanoi()函数和一个输出语句,直到n递减到0后,终止函数的递归,函数返回0。上面的a,b,c在每次调用函数后,所处的位置都不一样。上面调用过程中没有正确给出a,b,c。
只是想说明一下递归过程。
并且可以肯定的说n必然减少到0,然后终止这一分枝的输出
//当n减少到0后,判断 if(n>0)由于n=0,所以不执行if语句里面的内容,于是直接函数在这一支返回0,停止函数的递归调用
//貌似这个递归调用很像数据结构中的树状结构
//你要是学了数据结构,可能理解这个更容易一些。