cat971216 发表于 2020-10-13 19:49:42

P23欧几里得求公因数 求指点代码哪错了?



终于写出了代码但没有返回内容,虽然我的代码比标准答案啰嗦,但我总觉得应该能跑?

def gcd(x, y):
   
    if y > x:
      temp = y
      y = x
      x = temp

    elif y > 0:
      result = x % y
      x = y
      y = result
      gcd(x, y)
      
    else:
      return x


上述代码调用以后没有返回值,但如果elif y > 0里最后一步写return gcd(x, y)就可以正常返回了,请问这是为什么呢?

我的思路是,递归到最后总会跑到y>0并不成立,这个时候进入else,应该也可以返回x值啊,然后应该就有返回值的。

求指点,谢谢!

wp231957 发表于 2020-10-13 19:57:46

python交换两个变量十分简单
x,y=y,x

爷傲奈我何? 发表于 2020-10-13 20:03:32

def gcd(x, y):
    if y > x:
      temp = y
      y = x
      x = temp
      print(x)
      return x

    elif y > 0:
      result = x % y
      x = y
      y = result
      gcd(x, y)

    else:
      return x
gcd(1,2)

爷傲奈我何? 发表于 2020-10-13 20:05:53

爷傲奈我何? 发表于 2020-10-13 20:03
def gcd(x, y):
    if y > x:
      temp = y


函数要调用,才会执行,要想看到,需要print,if下面缺少返回值

笨鸟学飞 发表于 2020-10-14 17:28:39

def gcd(x, y):
   
    if y > x:                  #如果y = 10,x = 9
      temp = y            #temp = 10
      y = x                  #y = 9
      x = temp             #x = 10,再后面函数就结束了,啥返回内容也没有

    elif y > 0:               #同样道理,如果y = 9,x = 10,程序运行到这。第2次还是运行到这,x = 9,y = 1
      result = x % y      #result = 1。第2次结果resule = 9
      x = y                   #x = 9。第2次结果x = 1
      y = result             #y = 1。第2次结果y = 9
      gcd(x, y)            #再次调用函数本身。第2次还是调用函数本身,因为y>x,就去了上面那个判断处,啥也不返回
      
    else:                #你要么把这个else去掉试试看?你这意思0<y<x,才会返回x
      return x
==============
另外你这算法有点乱啊,函数内嵌套调用自身,容易造成死循环

cat971216 发表于 2020-10-18 16:23:34

爷傲奈我何? 发表于 2020-10-13 20:03
def gcd(x, y):
    if y > x:
      temp = y


这个好像只能跑y>x的情况,而且并没有算出来gcd…
页: [1]
查看完整版本: P23欧几里得求公因数 求指点代码哪错了?