最大公约数循环与递归版本

简介: 最大公约数循环与递归版本

简介: 本文讲解,求最大公约数循环与递归版本。

最大公约数介绍:最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。与最大公约数相对应的概念是最小公倍数,a,b的最小公倍数记为[a,b]。

循环版本:

方法辗转相除法

#include <stdio.h>
int main()
{
  int a, b, t;
  scanf("%d%d", &a, &b); 
  // 我们需要保证的是a不能比b小
  if(a < b)
  {
    t = a;
    a = b;
    b = t;                
  }
  while(b != 0)                   
  { 
    t = b;
    b = a % b;                    //辗转相除:相比第一种思路大大提高了代码的效率
    a = t;
  }
  printf("最大公约数为:%d",a);
  return 0;
}

递归版本:

方法辗转相除法

#include <stdio.h>
int gcd(int a, int b)
{
  return b == 0 ? a : gcd(b, a % b);
}
int main()
{
  int a, b, t;
  scanf("%d%d", &a, &b); 
  // 我们需要保证的是a不能比b小
  if(a < b)
  {
    t = a;
    a = b;
    b = t;                
  } 
  printf("最大公约数为:%d",gcd(a, b));
  return 0;
}


相关文章
|
6月前
|
机器学习/深度学习 C语言
函数递归与迭代附n的阶乘+顺序打印一个整数的每一位数+求第n个斐波那契数
函数递归与迭代附n的阶乘+顺序打印一个整数的每一位数+求第n个斐波那契数
52 0
c/c++求两个数的最大公约数(递归版)
c/c++求两个数的最大公约数(递归版)
191 0
剑指offer_递归与循环---斐波那契数列
剑指offer_递归与循环---斐波那契数列
62 0
剑指offer_递归与循环---跳台阶
剑指offer_递归与循环---跳台阶
59 0
字符串的逆序(循环和递归两种解法)
字符串的逆序(循环和递归两种解法)
154 0
算法学习--递归斐波那契数
算法学习--递归斐波那契数
算法学习--递归求n的阶乘
算法学习--递归求n的阶乘
算法--递归辗转相除法求最大公约数
算法--递归辗转相除法求最大公约数
|
存储 算法
打印N个数的循环算法和递归算法比较
打印N个数的循环算法和递归算法比较