| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2398 人关注过本帖
标题:汉诺塔的函数递归问题
只看楼主 加入收藏
windofland
Rank: 2
等 级:论坛游民
帖 子:27
专家分:12
注 册:2010-12-1
收藏
 问题点数:0 回复次数:9 
汉诺塔的函数递归问题
http://bbs.bccn.net/thread-348551-1-1.html
这帖子里的5楼说:
Hanio问题可以分成三个步骤,两类操作:
(1)将A上n-1个盘借助C座先移到B座上;
(2)把A座上剩下的一个盘子移到C座上;
(3)将n-1个盘子下从B座借助A座移到C座;

两类操作:
(1)将n-1个盘子从一个座移到另一个座(n>1)。这就是大和尚让小和尚做的工作
    它是一个递归的过程,即和尚将任务层层下放,知道第64个和尚为止。
(2)将一个盘子从一个座移到另一个座上。这是大和尚自己的工作。
那么请说明请解释下为什么两类操作中的“座”对应下列代码的两个函数递归部分:
程序代码:
move(int n,int a,int b,int c)
{
    if(n==1)
        printf("%c-->%c\n",a,c);
    else
    {
        move(n-1,a,c,b);  /*n=1,a=A,b=C,c=B*/
        printf("%c-->%c\n",a,c);
        move(n-1,b,a,c);  /*n=1,a=B,b=A,c=C*/
    }
我想了半天没想明白。

自己手动根据上面的思路写了下3个盘子情况下的移动步骤:
(1)把A座上的第n-1个盘子挪到B
(2)把A座上的第n个盘子挪到C
(3)把B座上的第n-1个盘子挪到C
那么a,c,b是不是对应的(1),b,a,c对应(3),也就是说(1)是从a到b借助c,(3)是从b到c借助a?

[ 本帖最后由 windofland 于 2012-4-23 21:00 编辑 ]
搜索更多相关主题的帖子: 工作 问题 
2012-04-23 20:59
xiyao0206
Rank: 2
等 级:论坛游民
帖 子:25
专家分:32
注 册:2012-4-23
收藏
得分:0 
楼主这样想是对的。第1步和第3部都是大和尚让小和尚做的工作。二者所需的步数和方法是一样的。只是采用的座的名字不一样罢了。
第一步中是将n-1个盘从a到b,借助c。第三步是将n-1个盘从b到c借助a。
2012-04-23 22:10
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
这题一般都想不明白,但是汉诺塔真的是一个特殊情况,一般递归函数不会用的这么抽象吧
2012-04-23 22:32
qingchundeji
Rank: 2
等 级:论坛游民
帖 子:31
专家分:83
注 册:2012-4-22
收藏
得分:0 
2楼说的对,当时我们老师就是这样讲的。
2012-04-23 22:54
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:0 
经典递归思想...

编程之路定要走完……
2012-04-25 21:46
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
其实这个程序的参数名字不太好,很容易让人产生误解,不知道a,b,c三个参数到底是啥东西。


冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2012-04-26 19:22
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
不用管它是怎么办  其实汉诺塔问题的解决方法还是分冶算法

至于什么是分冶算法  自己百度  首先我们认为n个盘子的汉诺塔不能解决 n-1的能解决

那么就把问题的规模缩小  首先把上面的n-1个移动到b盘子 然后移动第一个到c盘子

然后再把b的n-1个移动到c盘子上   这就是个很明显的递归了

                                         
===========深入<----------------->浅出============
2012-04-29 14:56
li往事
Rank: 2
等 级:论坛游民
帖 子:23
专家分:11
注 册:2012-3-27
收藏
得分:0 
这个问题可真的很让人折磨啊!我看了好几遍了还是不懂啊
2012-04-29 22:03
shanshan3003
Rank: 2
等 级:论坛游民
帖 子:53
专家分:66
注 册:2011-8-29
收藏
得分:0 
这是个递归问题,原理不是很难只要静心想下就容易实现
2012-04-29 22:09
醉月离殇
Rank: 2
等 级:论坛游民
帖 子:43
专家分:72
注 册:2011-11-23
收藏
得分:0 
回复 7楼 laoyang103
嗯,这么理解才能明白
2012-04-29 23:32
快速回复:汉诺塔的函数递归问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016463 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved