簡體   English   中英

兩個正整數python的最大公約數

[英]The greatest common divisor of two positive integers python

def mike(a,b):
    d=min(a,b)
    e=d
    if max(a,b)%d==0 and e%d==0:
        return d
    else:
        return mike(max(a,b),d-1)
print(mike(12,18))

我找不到一種方法來將'e'的值作為兩個整數中最小值的固定值(在情況下為12)。隨着代碼的移動,'e'的值也隨之變化。 但我希望它的固定值是兩者中最小的。 對不起,菜鳥問題。 請幫助。

因此,您無需使用函子,只需將e添加為可選參數

def mike(a,b,e=None):
    d=min(a,b)
    if not e:
        e=d
    if max(a,b)%d==0 and e%d==0:
    return d,e
    else:
        return mike(max(a,b),d-1,e)
print(mike(12,18))

這樣,您可以遞歸調用它,並且仍然跟蹤和輸出原始函數的最小值

我不明白為什么要設置e = d以及為什么需要d-1進行遞歸

def mike(a,b):
    rest = max(a, b) % min(a, b)
    if rest == 0:
        return min(a, b)
    else:
        return mike(min(a, b), rest)

gcd的計算。

(48,30)

用最大的除以最低的,然后得到其余的。 48/30 = 1(其余18個)

將前一個除數除以其余的30/18 = 1(其余的12)

將前一個除數再除以其余的18/12 = 1(其余6)

除以其余先前除數再次12/6 = 2(休息0)

gcd是rest == 0時的除數

最終我最終做到了這一點。 謝謝所有的答案。 我知道我使它變得更復雜了。

def mike(x,y):
    e=min(x,y)
    def mi(a,b):
        d=min(a,b)
        if max(a,b)%d==0 and e%d==0:
            return d
        else:
            return mi(max(a,b),d-1)
    zz=mi(x,y)
    return zz

print(mike(12,18))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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