标题:
汉诺塔问题
[打印本页]
作者:
过江龙
时间:
2005-10-12 21:30
标题:
汉诺塔问题
: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
欢迎光临 人在德国 社区 (http://csuchen.de/bbs/)
Powered by Discuz! 7.2