无功 发表于 2020-7-30 16:58:36

使用递归编写一个函数,利用欧几里得算法求最大公约数,例如 gcd(x, y) 返回值为参...

def gcd(x, y):
    if y:
      return gcd(y, x%y)
    else:
      return x
   
print(gcd(4, 6))

求解释 ,谢谢谢谢谢谢

zltzlt 发表于 2020-7-30 17:09:26

请见:https://fishc.com.cn/forum.php?mod=viewthread&tid=167183&ctid=1730

ouyunfu 发表于 2020-7-30 20:57:39

本帖最后由 ouyunfu 于 2020-7-30 21:00 编辑

这里计算原理依赖于下面的定理:
两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。

def gcd(x, y):
    if y: # y不等于0,执行下一语句,否则执行else
      print('gcd({},{})'.format(y,x%y)) #这样打印希望有助于理解
      return gcd(y, x%y) #这里是一个函数迭代,即x=y, y=x%y, 直到y=0, 返回x
    else:
      return x
   
print(gcd(4, 6))
页: [1]
查看完整版本: 使用递归编写一个函数,利用欧几里得算法求最大公约数,例如 gcd(x, y) 返回值为参...