| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 649 人关注过本帖
标题:递归求最大公约数,无限循环了
只看楼主 加入收藏
whukeming
Rank: 2
等 级:论坛游民
帖 子:76
专家分:51
注 册:2008-8-24
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
递归求最大公约数,无限循环了
求最大公约数,无限循环了。。。什么情况

程序代码:
# include "stdio.h"

int main(void)

{
    void hcf(int, int);
    
    int u, v;
    
    scanf("%d %d", &u, &v);
    
    hcf(u, v);
    
    return 0;
}

void hcf (int u, int v)

{
    int t, r;
    
    if (v > u)
    {
        t = u; u = v; v = t;
    }
    
    while ((r = u%v) != 0)
    {
        hcf (v, r);
    }
    
    printf("H.C.F = %d\n", v);
    
   
}
搜索更多相关主题的帖子: 公约数 
2013-04-18 11:05
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:5 
汗,欧几里得辗转连除法...
还写错了

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-18 11:27
whukeming
Rank: 2
等 级:论坛游民
帖 子:76
专家分:51
注 册:2008-8-24
收藏
得分:0 
回复 2楼 peach5460
亲,求指导
2013-04-18 11:34
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:5 
int  hcf(int m, int n)
{
    if(m%n==0)
       return n;
    else
       return hcf(n,m%n);
}
最大公约数这样就可以了
2013-04-18 12:24
whukeming
Rank: 2
等 级:论坛游民
帖 子:76
专家分:51
注 册:2008-8-24
收藏
得分:0 
回复 4楼 helloUJS
哦,谢谢
2013-04-18 14:06
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:5 
我给你举个例子,你就明白了,现在我们输入18 12;其中if的都不成立,所以不判断了,直接就有:
void hcf (18, 12)
{
    int t, r;
    while ((r = 18%12) != 0)
    {
        int t, r;        //模拟hcf (12, 6);r=0,然后输出v=6,然后返回到外部的while时候,还是满足的,
                           //然后在往里面循环,然后就一直不停了,所以会一直循环下去,
        while ((r = 12%6) != 0)
        {
            hcf (12, 6);
        }
   
        printf("H.C.F = %d\n", v);
    }
    printf("H.C.F = %d\n", v);
}

四楼的改正不可以出结果,我给你改下,只要把while循环控制换成条件控制就可以了,
void hcf (int u, int v)

{
    int t, r;
   
    if (v > u)
    {
        t = u; u = v; v = t;
    }
   
    if ((r = u%v)!=0)
    {
        hcf (v, r);
    }
   
    else printf("H.C.F = %d\n", v);
   
   
}


[ 本帖最后由 邓士林 于 2013-4-18 16:41 编辑 ]

Maybe
2013-04-18 16:38
ly371031846
Rank: 2
等 级:论坛游民
帖 子:40
专家分:79
注 册:2013-4-9
收藏
得分:5 
#include<stdio.h>
main()
{int x,y,t,i,c,d,e;
    scanf("%d%d",&x,&y);
    if(x<y){t=x;x=y;y=t;}
    for(i=1;i<y;i++){c=x%i;d=y%i;
    if(c==0&&d==0)e=i;}printf("%d",i);


}
2013-04-18 16:43
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:0 
void gcd(int m,int n)
{
     if(m%n==0)
        printf("%d\n",n);
     else
        gcd(n,m%n);
}
要输出结果,这样就行了
2013-04-18 22:04
快速回复:递归求最大公约数,无限循环了
数据加载中...
 
   



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

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