最大公约数(递归与非递归)

该博客探讨了如何使用辗转相除法求解两个数的最大公约数,对比了递归和非递归算法在效率上的差异。通过算法分析指出,递归方法在编译时间上显著优于非递归方法,递归方法平均用时约0.5秒,而非递归方法则平均用时约1.16秒。

时间限制:1 秒

内存限制:32 兆

特殊判题:


题目描述:

输入两个正整数,求其最大公约数。

输入:

测试数据有多组,每组输入两个正整数。

输出:

对于每组输入,请输出其最大公约数。

样例输入:
49 14
样例输出:

算法分析

采用辗转相除法。设有A,B两个数符合求取最大公约数,则 result = A % B,如果 result 不是最大公约数,则 A = B,B = result 循环求解,有最大公约数即结束程序。

结果分析

最大公约数求解中,递归方法比非递归方法效率高,递归方法编译时间为0.45-0.55 seconds;非递归方法编译时间为1.15-1.17 seconds

#include<stdio.h>
#include<stdlib.h>

int gcd(int a,int b){
     if(b==0)
        return a;
     else
        return gcd(b,a%b);
     }
int main(){
    int a,b;
    while(~scanf("%d%d",&a,&b))
    {
      printf("%d\n",gcd(a,b));
             
    }
    return 0;
    }


/*
*最大公约数计算(非递归方法) 
*/
#include <iostream>
using namespace std;
int main()
{
	int  m, n, temp ;
	while(cin>>m>>n)
	{
		while(n != 0)
		{
			m = m%n;
			temp = n;
			n = m;
			m = temp;
		}
		cout<<m<<endl;
	}
	return 0;

}







评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值