鱼C论坛

 找回密码
 立即注册
查看: 2391|回复: 7

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

[复制链接]
发表于 2020-10-30 23:14:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求大佬看看为什么返回不了b的值?return的作用不就是返回吗?
def gcd(a,b):
    if a!=0:
        a,b=b%a,a
        gcd(a,b)
    else :
        return b
gcd(24,12)    
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-30 23:48:13 | 显示全部楼层
if条件里面没有写retunr 语句,进入if语句就没有返回值,else有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-31 10:32:39 | 显示全部楼层
qin_yin 发表于 2020-10-30 23:48
if条件里面没有写retunr 语句,进入if语句就没有返回值,else有

但最后肯定会有a=0,那样的话肯定会有return b啊,为什么返回不了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-31 10:34:34 | 显示全部楼层
heidern0612 发表于 2020-10-31 07:30
像二楼说的,你if分支没return,加个return就好。

if里没有return,但依旧会执行函数,执行到最后一定会出现a=0,那样的话不就返回return b了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

if下面没有返回值,你的递归,有问题啊,没返回值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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分支,函数就结束了,因为没有反馈。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 00:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表