C语言--汉诺塔程序执行步骤
voidmove(charx,chary){printf("%c--->%c\n",x,y);}voidhanoi(intn,charone,chartwo,charth...
void move( char x, char y )
{
printf( "%c ---> %c\n", x, y );
}
void hanoi( int n, char one, char two, char three )
{
if ( n == 1 ) move( one , three )
else
{
hanoi( n - 1, one , three, two );
move( one, three );
hanoi( n - 1, two, one, three );
}
}
这个程序的运行步骤是如何进行的,各个参数是如何传递的.
帮烦大家给个详细的解说.谢谢了 展开
{
printf( "%c ---> %c\n", x, y );
}
void hanoi( int n, char one, char two, char three )
{
if ( n == 1 ) move( one , three )
else
{
hanoi( n - 1, one , three, two );
move( one, three );
hanoi( n - 1, two, one, three );
}
}
这个程序的运行步骤是如何进行的,各个参数是如何传递的.
帮烦大家给个详细的解说.谢谢了 展开
2个回答
展开全部
这个问题你要先把递归搞懂才能理解的, 最好是单跟踪执行一下, 我这里就简单说一下吧!
hanoi(5, 'a', 'b', 'c');把5个从'a'移到'c'
这时n=5, noe='a', two='b', three='c'
因为n!=1, 执行else里的
hanoi( 4, 'a', 'c', 'b'); //把上面4个从a移到b
move( 'a', 'c'); //把第5个从a移到c
hanoi( 4, 'b', 'a', 'c'); //再把那4个从b移到c
上面的很好明白的, 再分析hanoi( 4, 'a', 'c', 'b'); //把上面4个从a移到b,也是执行else
hanoi( 3, 'a', 'b', 'c'); //把上面3个从a移到c
move( 'a', 'b'); //把第4个从a移到b
hanoi( 4, 'c', 'a', 'b'); //再把那3个从c移到b
一直到n=1才结束
hanoi(5, 'a', 'b', 'c');把5个从'a'移到'c'
这时n=5, noe='a', two='b', three='c'
因为n!=1, 执行else里的
hanoi( 4, 'a', 'c', 'b'); //把上面4个从a移到b
move( 'a', 'c'); //把第5个从a移到c
hanoi( 4, 'b', 'a', 'c'); //再把那4个从b移到c
上面的很好明白的, 再分析hanoi( 4, 'a', 'c', 'b'); //把上面4个从a移到b,也是执行else
hanoi( 3, 'a', 'b', 'c'); //把上面3个从a移到c
move( 'a', 'b'); //把第4个从a移到b
hanoi( 4, 'c', 'a', 'b'); //再把那3个从c移到b
一直到n=1才结束
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询