下面这段程序是很常见的汉诺塔!但是我看了N久了 ,就是看不懂
请帮忙讲述一下流程!!
hanoi(int n,char x,char y,char z)
{
if(n==1)
printf("%c-->%c/n",x,z);
else
{
hanoi(n-1,x,z,y);
printf("%c-->%c/n",x,z);
hanoi(n-1,y,x,z);
}
}
它的流程是什么?先做哪条语句在做哪条语句请帮忙讲述
实际上很容易懂的。
hanoi(int n,char x,char y,char z);//说的是有n个盘子需要移动从x移到z,y为可以借助的
下面的是根据上面的函数的功能定义,进行逻辑分析 如果当n==1显然直接移动就可以了(if(n==1) printf("%c-->%c/n",x,z);)
反之,就要先把最下面盘子上面的所有盘子即n-1个盘子,先移到y上面当然要借助z所以有 hanoi(n-1,x,z,y);在这里进入了第归printf("%c-->%c/n",x,z);表示的是中间借助柱子的移动情况!!
好,现在最大的那个没动而n-1个已经移动到了y上面,z是空的,显然再把最下面的那个移到z上面啊!!就是n=1的情况了!!当然这时就从上面的那个第归开始返回了!!进入了下一条语句!如下:
最后的这条hanoi(n-1,y,x,z);很容易了就是把y上面的n-1个盘子移到z上面不就行了。
[此贴子已经被作者于2004-11-02 09:16:02编辑过]
实际上很容易懂的。
hanoi(int n,char x,char y,char z);//说的是有n个盘子需要移动从x移到z,y为可以借助的
下面的是根据上面的函数的功能定义,进行逻辑分析 如果当n==1显然直接移动就可以了(if(n==1) printf("%c-->%c/n",x,z);)
反之,就要先把最下面盘子上面的所有盘子即n-1个盘子,先移到y上面当然要借助z所以有 hanoi(n-1,x,z,y);在这里进入了第归printf("%c-->%c/n",x,z);表示的是中间借助柱子的移动情况!!
好,现在最大的那个没动而n-1个已经移动到了y上面,z是空的,显然再把最下面的那个移到z上面啊!!就是n=1的情况了!!当然这时就从上面的那个第归开始返回了!!进入了下一条语句!如下:
最后的这条hanoi(n-1,y,x,z);很容易了就是把y上面的n-1个盘子移到z上面不就行了。
呵呵 不错呀~~~~~~..................