2016-11-26 185 views
0

我想實現Euclid算法後我換變量,它們返回到它的原始值

def gcd(num1, num2): 
    if num2 > num1: 
     num1, num2 = num2, num1 
    while num1 % num2 != 0: 
     num1 %= num2 
     gcd(num1, num2) 
return num2 

當if語句得到執行,NUM1和NUM1 while循環中的值保持不變(因爲有是如果語句)

我想保持num1總是比num2大,但代碼運行,因爲沒有if語句。爲什麼?

+0

爲什麼嵌套函數調用? –

+0

它是Euclid的算法,我想在while循環裏面做這個程序,直到我得到num1%num2 == 0 – Maysara

+0

你明白嵌套函數調用的功能嗎? –

回答

0

有兩種方法:在while循環和遞歸。它看起來像你混合起來。 的同時版本是:

def gcd(a,b): 
    while b: 
     a,b = b, a % b 
    return a 

的遞歸版本是這樣的:

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

注意,如果你在函數中調用一個函數,你必須確保有一個終止標準,例如b == 0,並返回函數調用。之所以沒有發生什麼事情是因爲你的嵌套函數調用的結果沒有被傳回給外部函數調用。

相關問題