[英]Understanding the implementation of Euclid's Algorithm for GCF in Python
Euclid的兩個數字的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布爾運算符'或'和'和'不返回布爾值。 他們返回他們正在比較的值之一。
0或n - 返回n
0和n - 返回0
a and b or c
只是在C中實現(a ? b : c)
語法的技巧。
閱讀Dive into Python的 4.6節,了解python的布爾操作和這個技巧。
在您的情況下,調用堆棧將如下所示:
gcf(42,56)
gcf(56,42)//由於b非零,將遞歸並通過42%56(= 42)作為第二個arg
gcf(42,14)//因為b非零,將遞歸並通過56%42(= 14)作為第二個arg
gcf(14,0)//因為b非零,將遞歸並傳遞42%14(= 0)作為第二個arg
返回//因為b為零,只返回一個(14)
這將一直彈到頂部。 在python中,和將返回數字而不是布爾值,這就是為什么彈出返回結果而不是1 / true。
但是,一旦我將一對非零整數與邏輯和/或邏輯進行比較,我不明白發生了什么以及為什么。
會發生什么是返回影響結果的第一個值。
只要if x:
block中的代碼運行, x or y
- >計算結果為x
,否則計算結果為y
。
只要if x:
block中的代碼不運行, x and y
- >計算結果為x
,否則計算結果為y
。
為什么會這樣,是因為GvR這么說。 它可能正是使這個技巧發揮作用,回到x if C else y
之前, x if C else y
結構添加到語言中。
但是,你知道......你本可以親自測試一下。 這就是REPL的用途:)
如果b不等於零,則結果為gcf(b,a%b)(遞歸)。 如果b等於零,則結果為a。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.