当前位置: 代码迷 >> C语言 >> [求助]汉诺塔问题苦思10小时以上,还不是不太理解。哪位大人是否可以帮忙解 ...
  详细解决方案

[求助]汉诺塔问题苦思10小时以上,还不是不太理解。哪位大人是否可以帮忙解 ...

热度:261   发布时间:2005-03-03 12:25:00.0
[求助]汉诺塔问题苦思10小时以上,还不是不太理解。哪位大人是否可以帮忙解答
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
}
void hanoi(int n,char a,char b,char c)
{
if(n==1)move(a,c);
else
  {
   hanoi(n-1,a,c,b);
   move(a,c);
   hanoi(n-1,b,a,c);
  }
}
main()
{
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("The step to moving %3d diskes:\n",m);
hanoi(m,'A','B','C');
getch();
}

当n==2时,汉诺塔用递归移动的步骤都能理解了

,但n==3时,A-C, A-B, C-B, A-C,B-A, B-C,A-C,主要是不能理解递归时,C-B,B-A,B-C 是哪个函数做实参的。抱歉,头想的有点糊涂了,表达不太清楚
搜索更多相关的解决方案: 汉诺塔  quot  char  大人  hanoi  

----------------解决方案--------------------------------------------------------
  hanoi(n-1,a,c,b); 这个递归是不是实现A塔到B塔的移动,他是如何实现C-B,B-A,B-C的
  hanoi(n-1,b,a,c); 这个递归是不是实现B塔到C塔的移动呢?
  
----------------解决方案--------------------------------------------------------
不懂
----------------解决方案--------------------------------------------------------

hanoi(n-1,a,c,b); 这个递归是不是实现A塔到B塔的移动,他是如何实现C-B,B-A,B-C的 hanoi(n-1,b,a,c); 这个递归是不是实现B塔到C塔的移动呢?

你问得没有错,就是这样的!! 我对这个程序也看过好多次啦,我认为它的功能就是你 所说的那样!


----------------解决方案--------------------------------------------------------
递归思想要慢慢理解才能领悟,领悟后必然收益
汉诺问题的递归思想就是三步走:
原来都在A柱,辅助B柱,目标C柱
(1)想办法把A柱上的除最底下一个以外的盘借助C柱全部移到 B柱,
(2)把最后剩下的一个盘从A移到C;
(3)把B柱上的盘想办法全部移到C柱;
你或许已经发现我上面用了想办法这个词,而实现这个要求的办法我已经给出,你应该注意到每操作一次,问题的规模都在减小:原来是把N个盘移动到C,我已经转化为N-1个盘的问题,这就是递归的本质;

还有一个故事:
从前有座山,山上有个庙,庙里有个老和尚给小和尚讲故事,讲的内容是:“从前有座山……”
这就是递归了,当然上面的递归是物休止的,但实际应用中递归函数都有出口条件,上面的函数的出口就是n=1了
----------------解决方案--------------------------------------------------------
[IMG]http://www.njcsj.com/bbs2/UploadFile/2006-7/2006725214322952.gif[/IMG][IMG]http://www.njcsj.com/bbs2/UploadFile/2006-7/200672521446957.gif[/IMG]
----------------解决方案--------------------------------------------------------
  相关解决方案