You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于计算最大公约数(GCD)的递归代码逻辑的咨询

解析递归实现的最大公约数(GCD)代码

嘿,我来帮你拆解这段求最大公约数的递归代码——它其实是基于经典的欧几里得算法实现的,咱们一步步掰扯清楚:

首先先把完整代码贴出来方便对照:

def hcf(a, b):
    if(b == 0):
        return a
    else:
        return hcf(b, a % b)

# 示例:当a = 60、b = 48时,输出结果为12
# 原测试打印语句:print("The gcd of 60 and 48 is : ", end="")
print(hcf(24, 40))

核心逻辑拆解

1. 递归终止条件:if(b == 0): return a

这是整个递归的"终点"。咱们得先理解:任何数和0的最大公约数都是这个数本身。比如gcd(12, 0)的结果就是12,因为12能整除自己,0也能被12整除(0除以任何非零数都是0)。所以当b变成0时,当前的a就是我们要找的最大公约数。

2. 递归调用:return hcf(b, a % b)

这一步是欧几里得算法的核心:两个数的最大公约数,等于较小数和较大数除以较小数的余数的最大公约数,写成公式就是 gcd(a, b) = gcd(b, a mod b)

a % b 是Python里取余数的运算符,比如60除以48的余数是12,48除以12的余数是0。

拿示例走一遍流程

咱们用你代码里的hcf(24, 40)来一步步追踪:

  • 第一次调用:hcf(24, 40) → b≠0,调用hcf(40, 24%40) → 24%40=24,所以变成hcf(40,24)
  • 第二次调用:hcf(40,24) → b≠0,调用hcf(24,40%24) → 40%24=16,变成hcf(24,16)
  • 第三次调用:hcf(24,16) → b≠0,调用hcf(16,24%16) →24%16=8,变成hcf(16,8)
  • 第四次调用:hcf(16,8) → b≠0,调用hcf(8,16%8) →16%8=0,变成hcf(8,0)
  • 第五次调用:hcf(8,0) → b=0,返回8,这就是最终的最大公约数。

再验证你给的60和48的例子:
hcf(60,48)hcf(48,12)hcf(12,0) → 返回12,完全符合预期。

说白了,这个递归就是不断把问题"缩小",直到碰到终止条件,然后逐层返回结果,最终得到两个数的最大公约数。

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

火山引擎 最新活动