鱼C论坛

 找回密码
 立即注册
查看: 1403|回复: 5

[已解决]求最大公约数代码有问题,求大神指教。

[复制链接]
发表于 2017-8-31 21:07:45 | 显示全部楼层 |阅读模式

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

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

x
求最大公约数的时候我想用递归来做,但是这个代码 如果输入的是3,9 等明显可以被除断的输入的时候是没有问题的,
但是只要输入6,9 等无法被除断的输入的时候就会返回 None.
不知道代码哪个地方出错了,求大神指教 。由于今天无法再上传图片了,所以只好把代码贴出来了 。。


---------------------------------------------------------------------
分割线
-----------------------------------------------------
这是代码部分:

def gcd(x,y): # 默认x > y
        remain = x%y
        if remain == 0:
                return(y)
        else:
                gcd(y,remain)

               
while True:
        number = []
        str1 = input('请输入x,y,以","隔开:')
        number = str1.split(',')
        number_1 = int(number[0])
        number_2 = int(number[1])
        member_3 = 0

        if number_1 < number_2:
                number_3 = number_1
                number_1 = number_2
                number_2 = number_3
               
        print(gcd(number_1,number_2))
---------------------------------------------------------------------
分割线
-----------------------------------------------------

这是结果部分:

请输入x,y,以","隔开:3,9
3
请输入x,y,以","隔开:6,9
None
最佳答案
2017-8-31 21:29:25
def gcd(x,y): # 默认x > y
        remain = x%y
        if remain == 0:
                return(y)
        else:
                return gcd(y,remain)

               
while True:
        number = []
        str1 = input('请输入x,y,以","隔开:')
        number = str1.split(',')
        number_1 = int(number[0])
        number_2 = int(number[1])


        if number_1 < number_2:
                number_3 = number_1
                number_1 = number_2
                number_2 = number_3
        print(gcd(number_1,number_2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-31 21:29:25 | 显示全部楼层    本楼为最佳答案   
def gcd(x,y): # 默认x > y
        remain = x%y
        if remain == 0:
                return(y)
        else:
                return gcd(y,remain)

               
while True:
        number = []
        str1 = input('请输入x,y,以","隔开:')
        number = str1.split(',')
        number_1 = int(number[0])
        number_2 = int(number[1])


        if number_1 < number_2:
                number_3 = number_1
                number_1 = number_2
                number_2 = number_3
        print(gcd(number_1,number_2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-31 21:43:43 | 显示全部楼层
ba21 发表于 2017-8-31 21:29
def gcd(x,y): # 默认x > y
        remain = x%y
        if remain == 0:

为什么一定要加一个返回值呢 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-31 22:07:49 | 显示全部楼层
李小杰 发表于 2017-8-31 21:43
为什么一定要加一个返回值呢 ?

你想要得到值,所以就要返回值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-1 14:48:42 | 显示全部楼层
ba21 发表于 2017-8-31 22:07
你想要得到值,所以就要返回值

不好意思,今天有点忙现在才看到。
但是我在 remain == 0 的时候是会有返回值的。
我昨天理解了一下,是不是因为这个函数嵌套在外部函数内部的,所以虽然有返回值,但是返回值对最外层的函数是不可见的。也就是 (n-2)层函数有返回值给 (n-1)层,但是 (n-1) 层没有返回值给第 n 层函数, 所以导致最外层的函数没有返回值。
不知道这个理解是不是对的。如果不对还请大神指导指导。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-1 21:17:24 | 显示全部楼层
李小杰 发表于 2017-9-1 14:48
不好意思,今天有点忙现在才看到。
但是我在 remain == 0 的时候是会有返回值的。
我昨天理解了一下, ...

return(y) 是返回给倒数第2层
return gcd(y,remain) 返回给其它层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-10 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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