簡體   English   中英

在Python中理解Euclid的GCF算法的實現

[英]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 == n0 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM