| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1134 人关注过本帖
标题:我是初学者,请教
只看楼主 加入收藏
changshiop
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-7
收藏
 问题点数:0 回复次数:13 
我是初学者,请教
题目:递归调用
编写一个程序,要求:允许用户输入两个整数,求出并输出两个整数的最大公约数(Common denominator),这里介一个求公约数的算法--欧几里德算法,又称辗转相除法。其计算理如下:
用a除以b取余数a1
如果a1 = 0, 则b为最大公约数
否则用 b 除以a1取余数a2
如果a2 = 0,则a1为最大公约数
否则用 a1 除以a2取余数a3
如果a3 = 0,则a2为最大公约数
否则用a2除以a3取余数a4
。。。。。。
分析上述算法,总结出递推关系式,用递归方法实现这个程序。
搜索更多相关主题的帖子: 分析 欧几里德 分析 欧几里德 公约数 公约数 
2008-11-19 14:54
peng_piao
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-11-5
收藏
得分:0 
/*
 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

    程序分析:利用辗除法。

*/
#include <stdio.h>
int main(int argc, char* argv[])
{
    int a,b,num1,num2,temp;
    int i = 0;
    printf("please input two numbers:\n");
    scanf("%d %d",&num1,&num2);
    if(num1 < num2)
    { temp=num1;
    num1=num2;
    num2=temp;
    }
    a=num1;b=num2;
    while(b!=0)/*利用辗除法,直到b为0为止*/
    {
    temp=a%b;
    a=b;
    b=temp;
    i++;
    printf("a%d:%d\n", i, a);
    printf("a%d:%d\n", i, b);
    }
    printf("gongyueshu:%d\n",a);
    printf("gongbeishu:%d\n",num1*num2/a);
    return 0;
}
2008-11-19 15:12
changshiop
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-7
收藏
得分:0 
回复 2# 的帖子
此程序需要调用一个新函数的。
2008-11-19 15:17
谁与争瘋
Rank: 2
等 级:论坛游民
帖 子:360
专家分:14
注 册:2008-11-18
收藏
得分:0 
新手 也学习一下
2008-11-19 15:24
changshiop
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-7
收藏
得分:0 
回复 2# 的帖子
现在需要解决的是递归公式~
2008-11-19 15:27
changshiop
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-7
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
int get(int, int);
int main()
{
    int a, b, d;

    printf("Input two numbers in order to find out the answer!:\n");
    scanf("%d%d", a, b);
    int get(int a, int b);
    printf("最大公约数为:%d", d);
    return 0;
}

int get(int a, int b)
{
    int c, d;
    d = b;
    c = a % b;
    if (c != 0)
    {
        d = (b, c);
    }
    return d;
}
这样可以实现了吗?但是运行还是有错误啊
请教
2008-11-19 15:31
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
#include<stdio.h>
int f(int a,int b)
{
    if(a%b) return f(b,a%b);
    else return b;
}
void main()
{
    int a,b;
    printf("input a,b:\n");
    scanf("%d%d",&a,&b);
    printf("%d\n", f(a,b));
}

[[it] 本帖最后由 woshiyun 于 2008-11-19 15:58 编辑 [/it]]
2008-11-19 15:50
dingyin44
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-6-14
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
int get(int, int);
int main()
{
    int a, b, d;
    
    printf("Input two numbers in order to find out the answer!:\n");
    scanf("%d%d", &a, &b);
    if (a < b)
    {
        d = a;
        a = b;
        b = d;
        d = 0;
    }
    d = get(a, b);
    printf("最大公约数为:%d", d);
    return 0;
}

int get(int a, int b)
{
    int c, d;
    d = b;
    c = a % b;
    if (c != 0)
    {
        d = get(b, c);
    }
    return d;
}
2008-11-19 15:54
changshiop
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-7
收藏
得分:0 
搞出来了
#include <stdio.h>
#include <stdlib.h>
int get(int, int);
int main()
{
    int a, b, d;

    printf("Input two numbers in order to find out the answer!:\n");
    scanf("%d%d", &a, &b);
    d = get(a, b);
    printf("最大公约数为:%d", d);
    return 0;
}

int get(int a, int b)
{
    int c, d;
    d = b;
    c = a % b;
    if (c != 0)
    {
        d = get(b, c);
    }
    return d;
}
2008-11-19 16:18
changshiop
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-7
收藏
得分:0 
回复 8# 的帖子
还是你完善
谢谢了
2008-11-19 16:19
快速回复:我是初学者,请教
数据加载中...
 
   



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

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