python22讲课后题求助
请教大佬们,图片中画红线处如何理解,重新调用该函数的时候为什么是讲y的值赋给x、x%y的值赋给y。 本帖最后由 liuzhengyuan 于 2020-6-14 21:19 编辑辗转消除发呀(欧几里得算法)
你把它换成普通的不也是
t = x
x = y
y = t%y
呀
或者
x, y = y, x%y 嘛 这是一种递归的思想,在函数的内部调用函数的自身,y的值赋给x、x%y的值赋给y是因为这个函数的形参是(x,y)用位置参数传入,y对应的不就是x吗,x%y对应的不就是y吗,不要在意x,y就是个变量而已,不要被迷惑了
直接那个实例给你带着看吧,这样最好理解:
将 x = 4和y = 6 代入
def gcd(x, y):
# 开始时 x = 4, y = 6
# 第一次递归 x = 6 y = 4
# 第二次递归 x = 4 y = 2
if y:
# 刚开始 y = 6 条件成立执行if代码块
# 第一次递归 y = 4 继续进入 if 代码块
# 第二次递归 y = 2 继续进入 if 代码块
# 第三次递归 y = 0 条件不成立则进入else 代码块
return gcd(y, x % y)
# 进入第一次递归 gcd(6,4%6)即 gcd(6,4)
# 进入第二次递归 gcd(4,6%4) 即gcd (4,2)
# 进入第三次递归 gcd (2,4%2)即 gcd (2,0)
else:
return x # 第三次递归返回 x = 2
# 然后依次返回 先从第三次递归开始 gcd(2,0)-> gcd(4,2) -> gcd(6,4) -> gcd(4,6)
print(gcd(4, 6))
页:
[1]