| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 903 人关注过本帖
标题:递归的一道题 帮忙看看哪错了
只看楼主 加入收藏
Imtheone
Rank: 2
等 级:论坛游民
帖 子:78
专家分:34
注 册:2010-4-23
结帖率:5.26%
收藏
已结贴  问题点数:20 回复次数:9 
递归的一道题 帮忙看看哪错了
#include"stdio.h"
int gcd(int m,int n)
{
    int r;
   if(m%n==0) return n;
   else if(m%n==r)
   {
       if(r>0)
       return gcd(n,r);
   }
}
main()
{
    int a,b;
    printf("int two numberds:");
    scanf("%d%d",&a,&b);
    printf("%d",gcd(a,b));
}
求两个数的最大公约数
搜索更多相关主题的帖子: 递归 
2010-11-20 20:34
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:3 
#include"stdio.h"
int gcd(int m,int n)
{
    int r,i;
    if(m<n)        //你这里少了一个互换,如果你输入的值m<n时,应该让两数互换.
    {
        i=m;
        m=n;
        n=i;
    }
   if(m%n==0)
       return n;
   else if(m%n==r)
   {
       if(r>0)
       return gcd(n,r);
   }
}
main()
{
    int a,b;
    printf("int two numberds:");
    scanf("%d%d",&a,&b);
    printf("%d",gcd(a,b));
}

经验积累中............
2010-11-20 21:13
Imtheone
Rank: 2
等 级:论坛游民
帖 子:78
专家分:34
注 册:2010-4-23
收藏
得分:0 
想的简单了  我开始觉得没必要换  呵呵 谢谢啊
2010-11-20 22:07
林墨哓
Rank: 2
等 级:论坛游民
帖 子:16
专家分:18
注 册:2010-11-6
收藏
得分:3 
我觉得你的子函数那里好像有点不对,不光是少了互换。如果用225与125,你的程序输出的结果是1,而不是25。
#include"stdio.h"
int gcd(int m,int n)
{
    int r;
   r=m%n;
   if(r==0) return n;
   else
       return gcd(n,r);

}
main()
{
    int a,b,t;
    printf("int two numberds:");
    scanf("%d%d",&a,&b);
    if (a<b)
    {t=a;a=b;b=t;};
    printf("%d\n",gcd(a,b));
}
2010-11-20 22:21
tomliu05
Rank: 2
等 级:论坛游民
帖 子:17
专家分:28
注 册:2010-11-1
收藏
得分:3 
程序代码:
#include  <stdio.h>

int  MaxCommonFactor(int a,int b);

main()
{
    int  a,b,c=0;
    printf("Input  a,b:");
    scanf("%d,%d",&a,&b);
    c=MaxCommonFactor(a,b);
    printf("the result is:%d",c);
}
int  MaxCommonFactor(int x,int y)
{
    if(x>y)
    {
        MaxCommonFactor(x-y,y);
    }
    else if(x<y)
    {
        MaxCommonFactor(x,y-x);
    }
    else
    {
      return  x;
    }

}
这个是碾转相除法求最大公约数,用的也是递归
希望对楼主有帮助
2010-11-21 01:02
li520rong
Rank: 1
等 级:新手上路
帖 子:6
专家分:3
注 册:2010-11-18
收藏
得分:3 
以下是引用林墨哓在2010-11-20 22:21:55的发言:

我觉得你的子函数那里好像有点不对,不光是少了互换。如果用225与125,你的程序输出的结果是1,而不是25。
#include"stdio.h"
int gcd(int m,int n)
{
    int r;
   r=m%n;
   if(r==0) return n;
   else
       return gcd(n,r);

}
main()
{
    int a,b,t;
    printf("int two numberds:");
    scanf("%d%d",&a,&b);
    if (a
你这个也有些不对啊,得不到想要结果,我试了10和100,得不到想要的10
2010-11-21 02:36
li520rong
Rank: 1
等 级:新手上路
帖 子:6
专家分:3
注 册:2010-11-18
收藏
得分:0 
4,6楼的都忽略了一点,怎么说呢,举个例子吧,一个数2和5,你们的都把位置转换了,这对的,但是5%2后得到r=1,2%1得0,返回的值是2,但是这是错的啊
2010-11-21 02:47
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:3 
不要搞复杂化了。
程序代码:
#include<stdio.h>

int MaxCommon(int ,int);

int main()
{
    puts("Input 2 integers:");
    int m,n;
    scanf("%d%d",&m,&n);
    int k = MaxCommon(m,n);
    printf("%d和%d的最大公约数是%d\n",m,n,k);
    return 0;
}

int MaxCommon(int m,int n)
{
    int k;
    for(k = m < n ? m : n;n % k != 0||m % k != 0;k--);
    return k;
}


南国利剑
2010-11-21 03:04
aiyinsitan
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:183
专家分:177
注 册:2010-4-22
收藏
得分:3 
顶8L
2010-11-21 09:17
林墨哓
Rank: 2
等 级:论坛游民
帖 子:16
专家分:18
注 册:2010-11-6
收藏
得分:0 
不好意思 我也是刚学c语言,可能有些方面不清楚。可是为什么我自己运行程序是可以的?不论是2和5,还是10和100的结果的事正确的呀。。。如果看出问题的,能否帮忙指出一下。谢谢啊
2010-11-21 16:30
快速回复:递归的一道题 帮忙看看哪错了
数据加载中...
 
   



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

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