[英]Finding Greatest Common Divisor through iterative solution (python 3)
我試圖通過使用函數並迭代求解來找到偉大的公約數。 但是,由於某種原因,我不確定為什么我沒有得到正確的輸出。
30和15之間的最大公約數應該是15,但是,我的輸出總是給我錯誤的數字。 我有一種強烈的感覺,我的“如果”陳述是非常錯誤的。 請幫忙!
def square(a,b):
'''
x: int or float.
'''
c = a + b
while c > 0:
c -= 1
if a % c == 0 and b % c == 0:
return c
else:
return 1
obj = square(30,15)
print (obj)
僅當您完成所有數字的迭代並且沒有發現兩個數字的除數時,才應返回一個值:
def square(a, b):
c = a + b
while c > 0:
if a % c == 0 and b % c == 0:
return c
c -= 1
return 1
但是,在這種情況下,不需要最后一次return
,因為c
從a + b
變為1
,並且mod 1
將始終帶來一個公共除數,因此在最壞的情況下,循環將始終以1
結尾。
同樣,大於a
和b
的數字也不是它們的公因子。 ( x mod y for y > x yields x
),而gcd
是任務的正式名稱,所以我會選擇
def gcd(a, b):
for c in range(min(a, b), 0, -1):
if a % c == b % c == 0:
return c
用於迭代解決方案。
您可能想知道,有一個基於Euclidian算法的GCD問題的通用遞歸解決方案。
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
print(gcd(30, 15))
# 15
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.