鱼C论坛

 找回密码
 立即注册
查看: 2586|回复: 6

新手求助第22课动手题欧几里德算法求最大公约数

[复制链接]
发表于 2016-4-5 16:39:33 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ivyintel 于 2016-4-6 13:27 编辑

递归编写一个函数,利用欧几里德算法求最大公约数
def yue(x,y):
    result=x%y
   
    if result==0:
        print('if里面x=%d,y=%d,result=%d' %(x,y,result))
        return y
    else:
        x=y
        y=result
        print('x=%d,y=%d,result=%d' %(x,y,result))
        yue(x,y)
        

打印结果:
>>> print(yue(1515,600))
x=600,y=315,result=315
x=315,y=285,result=285
x=285,y=30,result=30
x=30,y=15,result=15
if里面x=30,y=15,result=0
None

可以看到最后已经进入到if循环了,y=15了,怎么结果却是None呢??
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-5 16:47:44 | 显示全部楼层
最后一行改为:
return yue(x,y)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-4-5 17:00:05 | 显示全部楼层
冬雪雪冬 发表于 2016-4-5 16:47
最后一行改为:
return yue(x,y)

好神奇,可是为什么非要弄个return呢?我哪个地方的概念没弄清呢。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-5 17:19:50 | 显示全部楼层
ivyintel 发表于 2016-4-5 17:00
好神奇,可是为什么非要弄个return呢?我哪个地方的概念没弄清呢。。。

如果没有reture函数就没有返回值,或者说返回None。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-5 17:25:09 | 显示全部楼层
冬雪雪冬 发表于 2016-4-5 17:19
如果没有reture函数就没有返回值,或者说返回None。

我在else里面是调用,最后终归会走到if呀,然后if里面有return了呀,return y。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-5 18:03:24 | 显示全部楼层
ivyintel 发表于 2016-4-5 17:25
我在else里面是调用,最后终归会走到if呀,然后if里面有return了呀,return y。。。

这么说吧,递归就是逐级调用,在逆序的逐级返回。当逐级调用到满足result==0时返回,注意这个return是在最里一级,但并没有传递到最外层。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-6 13:27:26 | 显示全部楼层
冬雪雪冬 发表于 2016-4-5 18:03
这么说吧,递归就是逐级调用,在逆序的逐级返回。当逐级调用到满足result==0时返回,注意这个return是在 ...

谢谢,我再仔细的琢磨琢磨。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-20 13:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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