|
发表于 2015-5-28 21:54:43
|
显示全部楼层
本帖最后由 buxiaode 于 2015-5-28 21:56 编辑
主要是 参数 传递 和 变量 混淆了 ,现 说明如下:
//将 n 个盘子从 x 借助 y 移动到 z
void move(int n, char xx, char yy, char zz)
{
if( 1 == n )
{
printf("%c-->%c\n", xx, zz);
}
else
{
move(n-1, xx, zz, yy); //将 n-1 个盘子从 xx 借助 zz 移动到 yy 上
printf("%c-->%c\n", xx, zz); //将 第n个盘子从xx移动到zz上
move (n-1, yy, xx, zz); //将n-1个盘子从yy借助xx移动到zz上
}
}
1: move(3,'X','Y','Z') // move( n, xx, yy, zz) // xx='X',yy='Y',ZZ='Z'
执行 move(2, 'X','Z','Y') //此处不展开
输出 2,'X'-->'Z'
执行 move(2, 'Y','X','Z')
2: move(2, 'Y','X','Z') // move( n, xx, yy, zz) // xx='Y',yy='X',ZZ='z'
执行 move(1, 'Y','Z','X') //此处不展开
输出 1,'Y'-->'Z'
执行 move(1, 'X','Y','Z')
3:move(1, 'X','Y','Z') //move( n, xx, yy, zz) // xx='X',yy='Y',ZZ='Z'
==1, 'X'-->'Z'
|
|