:o我是菜鸟,前几天看完了函数的递归的最后例子----汉诺塔问题.发觉把函数递归运用到非数值型的问题上,比较难理解.以下是汉诺塔问题的代码,偶不明白movedisc里面两个movedisc函数是怎样递归的,请问哪为高手能帮我解析下,最好有个图,呵呵,本人逻辑思维比较差....谢谢 
  int i=0; /* 移动圆盘数量计数器 */ 
main( ) 
{ unsigned n; 
printf("Please enter the number of discs:"); 
scanf ("%d", &n); /* 输入N值 */ 
movedisc (n, 'a', 'b', 'c'); /* 将A上的N个圆盘借助C将移动到B上 */ 
printf("\t Total: %d\n", i); 
} 
movedisc( n, fromneedle, toneedle, usingneedle) 
/* movedisc函数完成的功能是:将fromneedle杆上的n个圆盘借助 */ 
/* usingneedle杆移动到toneedle杆上 */ 
unsigned n; 
char fromneedle, toneedle, usingneedle; 
{ if ( n==1 ) 
printf("%2d-(%2d): %c ==> %c\n", ++i, n, fromneedle, toneedle); 
/* 将fromneedle上的一个圆盘移到toneedle上 */ 
else { 
movedisc(n-1, fromneedle, usingneedle, toneedle); 
/* 将fromneedle上的N-1个圆盘借助toneedle移到usingneedle上 */ 
printf("%2d-(%2d): %c ==> %c\n", ++i, n, fromneedle, toneedle); 
/* 将fromneedle上的一个圆盘移到toneedle上 */ 
movedisc (n-1, usingneedle, toneedle, fromneedle); 
/* 将usingneedle上的N-1个圆盘借助fromneedle移到toneedle上 */ 
} 
} 
输入N=3,程序的运行结果为: 
Please enter the number of discs: 3 
1-( 1): a ==> b 
2-( 2): a ==> c 
3-( 1): b ==> c 
4-( 3): a ==> b 
5-( 1): c ==> a 
6-( 2): c ==> b 
7-( 1): a ==> b 
Total: 7 
 
当进入第二个递归往上返回的时候,也就是N=1的时候这时,fromneedle=C,toneedle=B才对啊,怎么他打印出来是B->C呢?  应该是C->B吧?han.gif |