乱世英雄 发表于 2020-10-30 23:14:27

为什么我这样返回不了b的值? 欧几里得算法

求大佬看看为什么返回不了b的值?return的作用不就是返回吗?def gcd(a,b):
    if a!=0:
      a,b=b%a,a
      gcd(a,b)
    else :
      return b
gcd(24,12)   

qin_yin 发表于 2020-10-30 23:48:13

if条件里面没有写retunr 语句,进入if语句就没有返回值,else有

heidern0612 发表于 2020-10-31 07:30:59

像二楼说的,你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)

乱世英雄 发表于 2020-10-31 10:32:39

qin_yin 发表于 2020-10-30 23:48
if条件里面没有写retunr 语句,进入if语句就没有返回值,else有

但最后肯定会有a=0,那样的话肯定会有return b啊,为什么返回不了呢

乱世英雄 发表于 2020-10-31 10:34:34

heidern0612 发表于 2020-10-31 07:30
像二楼说的,你if分支没return,加个return就好。

if里没有return,但依旧会执行函数,执行到最后一定会出现a=0,那样的话不就返回return b了吗?

疾风怪盗 发表于 2020-10-31 12:47:37

乱世英雄 发表于 2020-10-31 10:34
if里没有return,但依旧会执行函数,执行到最后一定会出现a=0,那样的话不就返回return b了吗?

if下面没有返回值,你的递归,有问题啊,没返回值

heidern0612 发表于 2020-10-31 15:42:05

本帖最后由 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分支,函数就结束了,因为没有反馈。

笨鸟学飞 发表于 2020-10-31 20:54:06

========代码运行过程分析如下===============
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]
查看完整版本: 为什么我这样返回不了b的值? 欧几里得算法