鱼C论坛

 找回密码
 立即注册
查看: 1843|回复: 4

[已解决]17课作业,欧几里得算法求最大公约数

[复制链接]
发表于 2020-4-29 21:33:48 | 显示全部楼层 |阅读模式

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

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

x
def gcd(x,y):
    while y:
        t=x%y
        x=y
        y=t
        return x
这个是小甲鱼的答案,这是不是有错误啊,你输入(3,5)这个最大公约数不是1吗,结果出来是5.
而且看这个代码明显有问题,都没判断x,y大小的

如果可以的话,求个正确答案
最佳答案
2020-4-29 21:45:13
本帖最后由 jackz007 于 2020-4-29 23:47 编辑

        代码的唯一问题是
def gcd(x,y):
    while y:
. . . . . .
        return x    # 缩进位置错误,return 语句在 while 循环以内
        return x 的缩进位置不对,应该改成下面这样
def gcd(x , y):
    while y:
. . . . . .
    return x        # return 语句的位置应该在 while 循环以外
        辗转相除法 gcd() 的两个输入参数不用分大小顺序,假如原始输入参数 x < y ,那么,第一次循环就可以实现两个变量值的互换,第二次循环的时候,就一定是 x > y 了。不信的话,可以把 x 、y 在每次循环中的值打印出来看看就知道了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 21:38:14 | 显示全部楼层
def gcd(x, y):
        while y:
                x, y = y, x%y
        return x
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 21:45:13 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-4-29 23:47 编辑

        代码的唯一问题是
def gcd(x,y):
    while y:
. . . . . .
        return x    # 缩进位置错误,return 语句在 while 循环以内
        return x 的缩进位置不对,应该改成下面这样
def gcd(x , y):
    while y:
. . . . . .
    return x        # return 语句的位置应该在 while 循环以外
        辗转相除法 gcd() 的两个输入参数不用分大小顺序,假如原始输入参数 x < y ,那么,第一次循环就可以实现两个变量值的互换,第二次循环的时候,就一定是 x > y 了。不信的话,可以把 x 、y 在每次循环中的值打印出来看看就知道了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 22:15:19 | 显示全部楼层
很明显是你自己搞出来的缩进错误
而且欧几里得算法不需要比较大小
def gcd(x,y):
    while y:
        t=x%y
        x=y
        y=t
    return x
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 13:16:47 | 显示全部楼层
return x 多了一层缩进,而且根本没必要判断大小
def gcd(x, y):
    while y:
        t = x % y
        x = y
        y = t
    return x
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 18:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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