![](/img/trans.png)
[英]Using a function that finds divisors, find the greatest common divisor of any two given two positive integers
[英]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.