本文主要是介绍欧几里得算法求最大公约数的递归和非递归实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在数学中,欧几里得算法,又称辗转相除法,是求最大公约数(greatest common divisor)的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。
两个整数的最大公约数是能够同时整除它们的最大的正整数。
辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);因为252 − 105 = 21 × (12 − 5) = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。
递归公式表示位:
gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0)
/*** 欧几里得算法求最大公约数* 连续计算余数知道余数是0为止,最后的非零余数就是最大公因数* @param m* @param n* @return*/p
这篇关于欧几里得算法求最大公约数的递归和非递归实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!