| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 530 人关注过本帖
标题:递归问题~~!!大虾帮帮忙
只看楼主 加入收藏
觉悟ing
Rank: 2
等 级:论坛游民
帖 子:3
专家分:20
注 册:2009-11-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
递归问题~~!!大虾帮帮忙
#include <stdio.h>
#include <string>
extern int x=0;
void hanoi(int ,char ,char ,char);
void moveTo(int ,char ,char );
int main()
{
    int i;
    char a;
    while(1)
    {
        printf("输入1计算,其他任意键退出\n");
        scanf("%c",&a);
        switch(a)
            {
                case '1':
                      printf("请输入层数:");
                      scanf("%d",&i);
                      hanoi(i,'A','B','c');
                      printf("计算%d次\n",x);
                      break;
                default:
                    goto xxa;
            }
        
        getchar();
    }
    xxa:
        return 0;
}
void hanoi(int n,char fr,char to,char by)
{
    if (n<=0)
        return;
    if (n==1)
    {
        moveTo(n,fr,to);
        return;
    }
    hanoi(n-1,fr,by,to);
    moveTo(n,fr,to);
    hanoi(n-1,by,to,fr);
}
void moveTo(int n,char fr,char to)
{
    printf("%d from %c to %c\n",n,fr,to);
    x++;
}
汉诺塔问题的递归写法
看不懂
搜索更多相关主题的帖子: 递归 
2009-11-14 23:54
冻结的指针
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:6
专家分:18
注 册:2009-11-12
收藏
得分:5 
假设要解决的汉诺塔共有N个圆盘,对A塔上的全部N个圆盘从小到大顺序编号,最小的圆盘为1号,次之为2号,依次类推,则最下面的圆盘的编号为N。
     
    第一步:若A塔上只有一个圆盘,即汉诺塔只有一层,则只需将这个盘从A塔上移到B塔上即可;
     
    第二步:对于一个有N(N>1)个圆盘的汉诺塔,将N个圆盘分成两部分:上面的N-1个圆盘和最下面的N号圆盘。解决N个圆盘的汉诺塔,可以按下面的方式进行操作:
     
1、将A塔上面的N-1个圆盘,借助B塔,移到C塔上;
     
2、将A塔上剩余的N号盘子移到B塔上;
     
3、将C塔上的N-1个盘子,借助A塔,移到B塔上
最重要的是把hanoi(n-1,fr,by,to);当成一个整体去理解。
2009-11-15 16:09
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:5 
谭浩强的书上有这个例子,也有较为详细分析。
如他所说,如果前面的n-1个已经移动好了,那么怎么实现最后一步的移动呢?该步实现后,再假设,如果前面n-2个已经移动好了,怎么实现第n-1个呢?
……
一直到,第一次移动。
2009-11-15 19:09
Biffo
Rank: 2
等 级:论坛游民
帖 子:9
专家分:29
注 册:2009-11-15
收藏
得分:5 
这个问题可分为两个部分,假设三个柱子分别是ABC,要把n个圆环从A移到C上。
(1)把n-1个环借助C从A移到B。
(2)把剩下的第n个从A移到C。
剩下的n-1个要从B移到C,按照上面的方法做,一次类推,直到做完。

我对这道题今天想了好久,我想对于编程,尤其是算法,要多多思考,不要老是对着电脑发呆。(今天发呆了好久,呵呵!)
2009-11-15 23:24
快速回复:递归问题~~!!大虾帮帮忙
数据加载中...
 
   



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

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