Valorie 发表于 2020-5-18 22:09:18

如何用递归法去利用欧几里得算法求最大公约数?

第22节课后题最后一个:

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

请问大家,这个答案的return gcd(y,x%y)
具体是怎样运算的?

Twilight6 发表于 2020-5-18 22:20:08

def gcd(x, y):#初始x=4,y=6 ;第一次递归x=6,y=4 ;第二次递归x=4,y=2;第三 x=2,y=0
    if y:       # y=6 条件成立; y=4条件成立;y=2条件成立   ; y=0条件不成立
      return gcd(y, x % y) # 开始递归x=6,y=4;开始第二次递归x=4,y=2;开始第三次递归x=2,y=0
    else:
      return x# 最终递归返回 x = 2
print(gcd(4, 6))

如果帮助到你了,记得设置最佳~{:10_287:}

Twilight6 发表于 2020-5-18 22:33:41

Twilight6 发表于 2020-5-18 22:20

如果帮助到你了,记得设置最佳~

一个分号算一次递归哈,你要分开看
页: [1]
查看完整版本: 如何用递归法去利用欧几里得算法求最大公约数?