一、思路分析
求两个数的最大公约数,可以用欧几里得算法(辗转相除法。)其基于的定理是:两个数的最大公约数等于较小的那个数和这两个数相除的余数的最大公约数。
假设这两个数是a和b,其中,a大于b,a%b的值是r,那么a和b的最大公约数等于b和r的最大公约数。所以我们为了求出两个数的最大公约数,就要先用a和b取模(余数),再用b和模取模……一直循环下去。直到模为0,那么最后一次的除数就是最大公约数。所以我们就找到了递归的基线条件:模为0.
二、代码实现
def find_divisor(a,b):
'''这个函数用来求两个正整数的最大公约数'''
#下面的操作保证a永远是较大的数,这样对于我们传参的要求就低了,传入数字的大小顺序无所谓
if a<b:
a,b=b,a
#下面是基线条件,当余数为0时,b就是最大公约数
if a%b==0:
return b
#不符合基线条件时,就要继续寻找最大公约数,但是参数要变成b和ab的余数,实现递归
else:
return find_divisor(b,a%b)
print(find_divisor(88,24))
终端:8