You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中findGCD函数无法终止,运行终端无响应求排查

问题分析与解决

你的代码陷入无限循环导致终端冻结,核心问题有三个:

1. 变量未更新导致循环无法终止

num/2和num1/2仅执行除法运算,但未将结果重新赋值给原变量,num和num1始终保持初始传入的101和102,永远不会变为1或0,while True循环永远触发不了break。

正确的变量更新写法:

num = num // 2  # 用整数除法,因为处理的是正整数
num1 = num1 // 2

2. 条件判断逻辑完全错误

if num and num1 == 1 or 0:的语法与逻辑均不成立:

  • 该表达式运算优先级为:先判断num1 == 1,再与num做逻辑与,最后与0做逻辑或,结果永远为真(初始num为101,非零值在布尔判断中为True)
  • 若想表达“num等于1或0,且num1等于1或0”,正确写法是:
if (num == 1 or num == 0) and (num1 == 1 or num1 == 0):

3. 算法逻辑错误

你当前的思路完全不是计算最大公约数的正确方法,除以2的次数相乘的结果和GCD毫无关联。计算GCD最常用的是欧几里得算法(辗转相除法),效率高且逻辑清晰。

正确的GCD实现示例

欧几里得算法版本

def findGCD(num, num1):
    while num1 != 0:
        num, num1 = num1, num % num1
    print(num)

findGCD(101, 102)  # 输出1,因为101是质数,和102互质

质因数分解版本(直观但效率稍低)

def findGCD(num, num1):
    def get_factors(n):
        factors = {}
        while n % 2 == 0:
            factors[2] = factors.get(2, 0) + 1
            n = n // 2
        i = 3
        while i*i <= n:
            while n % i == 0:
                factors[i] = factors.get(i, 0) + 1
                n = n // i
            i += 2
        if n > 2:
            factors[n] = 1
        return factors
    
    factors_num = get_factors(num)
    factors_num1 = get_factors(num1)
    
    gcd = 1
    for prime in factors_num:
        if prime in factors_num1:
            gcd *= prime ** min(factors_num[prime], factors_num1[prime])
    print(gcd)

findGCD(101, 102)  # 输出1

内容的提问来源于stack exchange,提问作者Taha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:55:16