关于用欧几里得求最大公约数的问题
作业答案是:def gcd(x,y):
while y: #问题1:这里不用判断 x 和 y 的大小吗?(不是用大的除以小的吗?为啥判断 y 是 true?)
t = x % y
x = y
y = t
return x
print(gcd(18,9))
我的方法笨的很:
def gcd(x, y):
y = max(x, y)#问题2:我测试 比如:gcd(6,9) 的出来的结果是对的,但顺序一旦颠倒 gcd(9 ,6),就报错:超过最大递归深度maximum recursion depth exceeded in comparison---我给的测试数明明都不大,怎么就超出了?是循环写的有问题?
x = min(x, y)
while x < y:
z = b % x
if z != 0:
y = x
x = z
else:
return x
print(gcd(x, y))
#问题3:我测试了标准答案gcd(2, 7)gcd(8, 24)gcd(24, 8) 都是对的,我对照着改了好多次自己的都不对,求大神指正其他错误。
你的答案什么情况? 没设置递归都会报递归错误....?
而且代码中凭空产生了一个 b ....?
while y的意思 是while y<>0 测试两个数 哪个大 可以用交换
不用maxmin 等等
假设 if x>y 继续的话你可以这样
if x<y :x,y=y,x
页:
[1]