2017-09-05 33 views
-3

這是我的代碼,使用歐幾里德算法找到最大公分母。爲什麼我的嵌套如果被忽略?

def gcdIter(a, b): 

    if a > b: 
     if a%b == 0: 
      return b 
     r = a%b 
     a = b 
     return gcdIter(a, r) 
    elif a < b: 
     if b%a == 0: 
      return a 
     r = b%a 
     a = b 
     return gcdIter(a, r) 

gcdIter(12, 2) 

編輯:改變(ELIF b < a)至(艾利芙一個< B)

+0

什麼是你的問題? – ifconfig

+1

'a> b'與'b alfasin

+0

如果%b的剩餘部分等於零,它不會返回a或b –

回答

0

由於gcdIter正在返回一個值,您需要打印它。

print gcdIter(12, 2) 

就可以計算出GCD這樣也

def gcd(a,b): 
    if b==0: 
     return a 
    return gcd(b,a%b) 
1

我覺得你elif應該是這樣的:

elif a < b: 

由於a > bb < a基本上是相同的東西...

0

你elif部分將永遠不會到達。如果a> b第一個如果它自己滿意。將elif條件更改爲b> a。但對於你的輸入gcd(12,2)它應該工作。

+0

如果您嘗試在pythontutor.com上運行此代碼。你會看到它不會返回而不是返回b。 –

0

也許你可以這樣做:

def gcdIter(a, b): 
    if (a < b): 
     return gcdIter(b, a) 

    # rest of your code 

在這種情況下,你可以確保你的功能,你會永遠擁有更少的價值對於B。

+1

但是,這不會返回GCD –

+0

因爲對於每個循環,其餘的應該總是被分成b,直到沒有餘數來獲得GCD。下次我應該對我的問題發表評論。 –