欧几里得的两个数的gcf算法是:GCF(a, b)=GCF(b, a mod b)
。我在python中看到了如下实现:
def gcf(a, b):
return b and gcf(b, a%b) or a
我不知道如何解析这个函数,也不知道如何将布尔逻辑应用于整数。例如,
gcf(42, 56) = 14
。当我浏览它时,我看到递归部分最终返回零。我遵循0 or n == n
和0 and n == 0
。然而,一旦有一对非零整数与和/或逻辑进行比较,我就不明白会发生什么以及为什么。有人能带我去参加这个活动吗?
最佳答案
Python布尔运算符'or'和'and'不返回布尔值它们返回正在比较的值之一。
0或n-返回n
0和n-返回0a and b or c
只是在c中实现(a ? b : c)
语法的一个技巧。
阅读Dive into Python的第4.6节,了解python的布尔运算和这个技巧的详细描述。