17课作业,欧几里得算法求最大公约数
def gcd(x,y):while y:
t=x%y
x=y
y=t
return x
这个是小甲鱼的答案,这是不是有错误啊,你输入(3,5)这个最大公约数不是1吗,结果出来是5.
而且看这个代码明显有问题,都没判断x,y大小的
如果可以的话,求个正确答案 def gcd(x, y):
while y:
x, y = y, x%y
return x 本帖最后由 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 在每次循环中的值打印出来看看就知道了。 很明显是你自己搞出来的缩进错误
而且欧几里得算法不需要比较大小def gcd(x,y):
while y:
t=x%y
x=y
y=t
return x return x 多了一层缩进,而且根本没必要判断大小
def gcd(x, y):
while y:
t = x % y
x = y
y = t
return x
页:
[1]