Python gcdIter函数故障咨询:循环无法迭代问题排查
问题分析与解决
你的问题出在循环里的判断逻辑上:
原代码用了if a % gcd != 0 and b % gcd != 0,意思是只有当gcd既不能整除a也不能整除b的时候,才会减小gcd。但实际上,只要gcd不能整除其中任意一个数,就不是公约数,需要继续往下找。比如计算9和12的gcd时,初始gcd是9,9能整除9但不能整除12,这时候原代码的条件不满足,直接返回了错误的9。
修正后的代码
把判断条件里的and改成or,就能修复这个问题:
def gcdIter(a, b): # 取较小值作为初始公约数候选 gcd = min(a, b) while gcd > 0: # 只要不能整除其中一个数,就减小候选值 if a % gcd != 0 or b % gcd != 0: gcd -= 1 else: return gcd print(gcdIter(9, 12)) # 输出3
额外优化说明
用min(a,b)可以替代原来的if-else判断,让代码更简洁,逻辑和原代码完全一致。
内容的提问来源于stack exchange,提问作者Riham
相关产品推荐
相关产品推荐

