鱼C论坛

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

[已解决]1. 使用递归编写一个函数,利用欧几里得算法求最大公约数,例如 gcd(x, y) 返回值...

[复制链接]
发表于 2019-4-20 13:15:49 | 显示全部楼层 |阅读模式

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

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

x
1. 使用递归编写一个函数,利用欧几里得算法求最大公约数,例如 gcd(x, y) 返回值为参数 x 和参数 y 的最大公约数。
为什么这样写报错:
def gcd(a,b):
        if a%b == 0 :
                return b
        else:
                a=b
                b=a%b
                return gcd (a,b)

这样写又可以用:
def gcd(a,b):
        if a%b == 0 :
                return b
        else:

                return gcd (b,a%b)
最佳答案
2019-4-20 16:48:19
sysumax 发表于 2019-4-20 14:52
可是输入a>b的情况也会报除数为0的错,我想了好几遍都理解不了 为啥会出现除数为0的错

a除以b的余数如果不是0的话,
就将a设为b,
b又设为a(原来的b)除以b的余数,
b就是零了,又调用gcd函数(gcd(a, b)),
if a%b(0) == 0: ,除数是零
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-20 13:26:41 From FishC Mobile | 显示全部楼层
报啥错呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-20 13:31:03 | 显示全部楼层
Traceback (most recent call last):
  File "/Users/chenxu/Desktop/017.py", line 9, in <module>
    print (gcd(4,3))
  File "/Users/chenxu/Desktop/017.py", line 7, in gcd
    return gcd (a,b)
  File "/Users/chenxu/Desktop/017.py", line 2, in gcd
    if a%b == 0 :
ZeroDivisionError: integer division or modulo by zero

我自己感觉这样运算不会除0啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 14:07:00 | 显示全部楼层
本帖最后由 lixiangyv 于 2019-4-20 14:37 编辑
sysumax 发表于 2019-4-20 13:31
Traceback (most recent call last):
  File "/Users/chenxu/Desktop/017.py", line 9, in
    print (g ...


就是会除以零呢?
比如a是5,b是10,
a除以b的余数不是0,
之后就将a设为b
b又设为a(原来的b)除以b的余数,
b就是零了,有调用gcd函数,
a(10)除以b(0),除数不能是零,
所以报了除以零的错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-20 14:52:25 | 显示全部楼层
可是输入a>b的情况也会报除数为0的错,我想了好几遍都理解不了 为啥会出现除数为0的错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 16:48:19 | 显示全部楼层    本楼为最佳答案   
sysumax 发表于 2019-4-20 14:52
可是输入a>b的情况也会报除数为0的错,我想了好几遍都理解不了 为啥会出现除数为0的错

a除以b的余数如果不是0的话,
就将a设为b,
b又设为a(原来的b)除以b的余数,
b就是零了,又调用gcd函数(gcd(a, b)),
if a%b(0) == 0: ,除数是零
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-20 21:42:09 | 显示全部楼层
lixiangyv 发表于 2019-4-20 16:48
a除以b的余数如果不是0的话,
就将a设为b,
b又设为a(原来的b)除以b的余数,

明白了 谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 10:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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