名字是啥 发表于 2021-10-9 15:50:50

课后22,小白求助

def gcd(x,y):
    if y:
      t = y
      y = x % y
      x = t
      gcd(x,y)
    else:
      return x

print(gcd(1997,615))


为什么这个返回结果是none呢{:10_269:}

wp231957 发表于 2021-10-9 15:54:13

def gcd(x,y):
    if y:
      t = y
      y = x % y
      x = t
      return gcd(x,y)
    else:
      return x

print(gcd(15,615))

嘉岳呀 发表于 2021-10-9 17:44:23

应改为:


def gcd(x,y):
    if y:
      t = y
      y = x % y
      x = t
      return gcd(x,y)
    else:
      return x

print(gcd(15,615))

hi_baoge 发表于 2021-10-9 18:01:48

原因大概就是gcd()在循环调用,调用了很多层,只有最后一次进入else后,return了x的值给倒数第二次调用,而在倒数第二次调用的过程中,执行的是if里面的代码段,在这个代码段里没有return,所以倒数第三次调用的返回值就是none,以此类推,打印出来的就是return。

名字是啥 发表于 2021-10-9 21:33:42

hi_baoge 发表于 2021-10-9 18:01
原因大概就是gcd()在循环调用,调用了很多层,只有最后一次进入else后,return了x的值给倒数第二次调用,而 ...

为什么会return x给倒数第二次用呢,这不是顺序吗?不明白

hi_baoge 发表于 2021-10-11 11:13:10

本帖最后由 hi_baoge 于 2021-10-11 11:14 编辑

名字是啥 发表于 2021-10-9 21:33
为什么会return x给倒数第二次用呢,这不是顺序吗?不明白

你这样子理解一下你执行gcd(1997,512)是不是因为y为ture值然后取余运算又执行了gcd(x,y)   相当于在函数里又调用了一次函数   然后不断递归   直到执行else   然后return   这属于函数递归执行了6次gcd()函数
这时候你要知道   函数如果有return那函数的返回值就是return的值如果没有return返回值就是none
这时候再回过来看你这个题是不是只有第六次调用执行进else里面才执行了return命令但是return的值   只return回了第五次调用里 而第五次调用是不是执行进了y里面y里面是不是没有return命令   那是不是相当于给第四次调用return了一个none以此类推 第一次调用的返回值就是none了所以打印的就是none
页: [1]
查看完整版本: 课后22,小白求助