1. 编写一个函数,利用欧几里得算法求最大公约数,
def gcd(x, y):while y:
t = x % y
x = y
y = t
return x
print(gcd(4, 6))
每一步我都带入进去了就是不对啊。。。。我应该是逻辑出问题了。。。。求助 哪位大神把每一步都帮我解释下。。。。。谢谢 运行结果其实没问题吧{:9_241:},不过欧几里得是要用大的除小的,你需要在进行运算前保证被除数大于除数
有点不规范吧 本帖最后由 qhxzf 于 2022-10-4 01:49 编辑
def gcd(x,y):
while y:
t = x % y
x = y
y = t
return x
print(gcd(4,6))
return应该是在while循环结束后返回,而不是执行一次就返回 qhxzf 发表于 2022-10-4 01:48
return应该是在while循环结束后返回,而不是执行一次就返回
看注释:
def gcd(x, y):
# 传入参数 x = 4, y = 6
# 当数值数据作为条件判断时,只要非 0 或 0.0 都视为 True
# 所以这里第一次进入循环时,y = 6 符合循环条件
while y:
# 第一次循环开始,y = 6 符合循环条件,执行循环体
# 第二次循环开始,y = 4 依旧符合循环条件,循环继续
# 第三次循环开始,y = 2 不符合循环条件,退出循环
t = x % y
# 第一次循环,t = 4 % 6 = 4
# 第二次循环,t = 6 % 4 = 2
# 第三次循环,t = 4 % 2 = 0
x = y
# 第一次循环,x = y = 6
# 第二次循环,x = y = 4
# 第三次循环,x = y = 2
y = t
# 第一次循环结束:y = t = 4,开始下次循环
# 第二次循环结束:y = t = 2,开始下次循环
# 滴三次循环结束:y = t = 0,开始下次循环
# 最终返回 x = 2
return x
print(gcd(4, 6)) # 递归版本 -- gcd( )
def gcd(x, y):
if x == 0:
return y
return gcd(y % x, x)
print(gcd(6, 6))
页:
[1]