为什么我这样返回不了b的值? 欧几里得算法
求大佬看看为什么返回不了b的值?return的作用不就是返回吗?def gcd(a,b):if a!=0:
a,b=b%a,a
gcd(a,b)
else :
return b
gcd(24,12)
if条件里面没有写retunr 语句,进入if语句就没有返回值,else有 像二楼说的,你if分支没return,加个return就好。
def gcd(a, b):
if a != 0:
a, b = b % a, a
return gcd(a, b)
else:
return b
gcd(24, 12) qin_yin 发表于 2020-10-30 23:48
if条件里面没有写retunr 语句,进入if语句就没有返回值,else有
但最后肯定会有a=0,那样的话肯定会有return b啊,为什么返回不了呢 heidern0612 发表于 2020-10-31 07:30
像二楼说的,你if分支没return,加个return就好。
if里没有return,但依旧会执行函数,执行到最后一定会出现a=0,那样的话不就返回return b了吗?
乱世英雄 发表于 2020-10-31 10:34
if里没有return,但依旧会执行函数,执行到最后一定会出现a=0,那样的话不就返回return b了吗?
if下面没有返回值,你的递归,有问题啊,没返回值 本帖最后由 heidern0612 于 2020-10-31 15:45 编辑
乱世英雄 发表于 2020-10-31 10:34
if里没有return,但依旧会执行函数,执行到最后一定会出现a=0,那样的话不就返回return b了吗?
你不return,函数根本都没返回值,还怎么继续下去?那还递归什么?
要是照你的理解,那else也不用return了,反正也会继续下去。
return是做为函数的一种运行结果而提供给函数调用者,你只执行,但是没反馈的话,else分支永远也到不了a=0,实际上应该就是在你第一次进入if分支,函数就结束了,因为没有反馈。 ========代码运行过程分析如下===============
def gcd(a,b): #2.a=24,b=12--5.a=12,b=24
if a!=0:
a,b=b%a,a #3. a=12,b=24 ---6.a=0,b=12
gcd(a,b) #4.递归调用7.递归调用后,返回了结果b,返回层在函数内。相当于这句不管怎么运行,只有一个结果b,并未返回到gcd()函数外部
else :
return b
gcd(24,12) #1.传参数调用函数
==============修改建议==============
>>> def gcd(a,b):
if a!=0:
a,b=b%a,a
return gcd(a,b)#把递归调用的结果返回到gcd()函数外部,就满足你的需求了
else:
return b
>>> gcd(24,12)
12
页:
[1]