python题库 No.38 最大公约数

编写一个名为 gcdRecur() 的函数,传入两个参数分别为a和b,可以实现最大公约数运算,计算a和b的最大公约数。
例如:10和5,最大公约数为5。
传入参数a和b分别为15和70,调用函数 gcdRecur() ,计算15和70的最大公约数x并格式化输出“15和70的最大公约数为x”。

实际答案:

def gcdRecur(a, b):
  max_ab = max(a, b)
  min_ab = min(a, b)
  a = min_ab
  b = max_ab
  list_temp = []
  for i in range(1, a + 1):
    if (a % i == 0) & (b % i == 0):
      list_temp.append(i)
  result = max(list_temp)
  print(f"15和70的最大公约数为{result}")
      

gcdRecur(15, 70)

标准答案:

image

点评:
标准答案又用了递归的方法,基于的原理是欧几里得算法,又称辗转相除法。
辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。

一开始程序写成if else的形式,如果两个数一大一小的时候,取最小的在前面,基于的考虑是节省计算次数。后面发现如果写成if else的形式,程序就只执行其中一个条件了,相当于是二选一,所以改写后去掉了条件判断。

posted @ 2025-12-27 09:16  点影成金  阅读(2)  评论(0)    收藏  举报