| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 611 人关注过本帖
标题:我用递归算法写了个汉诺塔的程序 为什么圆盘超过9个就不对了
只看楼主 加入收藏
constantlike
Rank: 2
等 级:论坛游民
帖 子:8
专家分:31
注 册:2011-12-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
我用递归算法写了个汉诺塔的程序 为什么圆盘超过9个就不对了
# include <stdio.h>

void hannuota(char ch1, char ch2, char ch3, int n)
{
    if (n == 1)
        printf("第%d个盘从%c放到%c\n", n, ch1, ch3);
    else
    {
        hannuota(ch1, ch3, ch2, n-1);
        printf("第%d个盘从%c放到%c\n", n, ch1, ch3);
        hannuota(ch2, ch1, ch3, n-1);
    }
    return;
}

int main(void)
{
    char ch1 = 'A';
    char ch2 = 'B';
    char ch3 = 'C';
    int n;
    printf("输入个数:");
    scanf("%d", &n);
    hannuota(ch1, ch2, ch3, n);

    return 0;
}
搜索更多相关主题的帖子: return include 
2011-12-31 12:00
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <math.h>
void fun(char a,char b,char c,int n)
{
    if(0 == n)
        return ;
    fun(a,c,b,n-1);
    printf("%c -> %c\n",a,c);
    fun(b,a,c,n-1);
}
int main()
{
    int i,j,n;
    scanf("%d",&n);
    while(n--)
    {
        int m = 0;
        scanf("%d",&m);
        fun('1','2','3',m);
        printf("Total Steps: %d\n",(int)pow(2,m)-1);
    }
    return 0;
}

                                         
===========深入<----------------->浅出============
2011-12-31 20:38
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
收藏
得分:15 
程序代码:
/*
程序没有错误,只是cmd控制屏幕下先前的被覆盖了,可以先把它存入文本文件再查找看看。
*/
#include <stdio.h>

int c=0;

void move(int n, char x, char y)
{
    FILE *fp;
    if((fp=fopen("D:\\test.txt", "a"))==NULL)
        return;
    fprintf(fp,"第%d步:将%d号圆盘从%c->%c\n",++c, n, x, y);
    fclose(fp);
}

void hannuota(char ch1, char ch2, char ch3, int n)
{
    if (n == 1)
       move(n, ch1, ch3); //printf("第%d步:将%d号圆盘从%c->%c\n",++c, n, ch1, ch3); //将编号为1的圆盘从A移到C
    else
    {
        hannuota(ch1, ch3, ch2, n-1); //将A上1到n-1个圆盘移动到B,C作为辅助塔
       move(n, ch1, ch3); // printf("第%d步:将%d号圆盘从%c->%c\n",++c, n, ch1, ch3); //将编号为n的圆盘从A移到C
        hannuota(ch2, ch1, ch3, n-1); //将B上编号为1到n-1的圆盘移到C,A作辅助塔
    }
    return;
}

int main(void)
{
    char ch1 = 'A';
    char ch2 = 'B';
    char ch3 = 'C';
    int n ;
    printf("输入个数:");
    scanf("%d", &n);
    hannuota(ch1, ch2, ch3, n);
    printf("请到D盘根目录下查找文本文件test.txt\n");
    return 0;
}


听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2012-01-01 13:31
快速回复:我用递归算法写了个汉诺塔的程序 为什么圆盘超过9个就不对了
数据加载中...
 
   



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

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