课后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:} def gcd(x,y):
if y:
t = y
y = x % y
x = t
return gcd(x,y)
else:
return x
print(gcd(15,615)) 应改为:
def gcd(x,y):
if y:
t = y
y = x % y
x = t
return gcd(x,y)
else:
return x
print(gcd(15,615)) 原因大概就是gcd()在循环调用,调用了很多层,只有最后一次进入else后,return了x的值给倒数第二次调用,而在倒数第二次调用的过程中,执行的是if里面的代码段,在这个代码段里没有return,所以倒数第三次调用的返回值就是none,以此类推,打印出来的就是return。 hi_baoge 发表于 2021-10-9 18:01
原因大概就是gcd()在循环调用,调用了很多层,只有最后一次进入else后,return了x的值给倒数第二次调用,而 ...
为什么会return x给倒数第二次用呢,这不是顺序吗?不明白 本帖最后由 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]