交换变量后,它们返回原始值

时间:2016-11-26 20:00:27

标签: python-3.x

我正在尝试实现Euclid的算法

def gcd(num1, num2):
    if num2 > num1:
        num1, num2 = num2, num1
    while num1 % num2 != 0:
        num1 %= num2
        gcd(num1, num2)
return num2

当if语句执行时,while循环中num1和num1的值保持不变(因为没有if语句)

我想保持num1总是大于num2但是,代码运行,因为没有if语句。为什么?

1 个答案:

答案 0 :(得分:0)

有两种方法:在while循环和递归中。看起来你把它们搞混了。 while版本将是:

def gcd(a,b):
   while b:
      a,b = b, a % b
   return a

递归版本是这样的:

def gcd(a,b):
   if b == 0:
      return a
   else:
      return gcd(b, a % b)

请注意,如果在函数内调用函数,则必须确保存在终止条件,例如if b == 0并返回函数调用。在你的情况下没有发生任何事情的原因是因为你的嵌套函数调用的结果没有被传递回外部函数调用。