2013-12-15 66 views
1

這裏是我的代碼:我在做這個lcm python代碼錯了什麼?

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

    elif b%a == 0: 
     return a 
     print a 
    else: 
     if a > b: 
      gcd(a%b,b) 
     elif b > a: 
      gcd(b%a,a) 
     else: 
      return a 
      print a 
def lcm(a,b): 
    if a==b: 
     return a 
    else: 
     y = gcd(a,b) 
     return (a*b)/y 
     print (a*b)/y 

我在做什麼錯?我不斷收到一個錯誤,因爲顯然y = gcd(a,b)是一個NoneType,它必須是一個整數。但從我看到它是一個整數。

回答

2

return放在您遞歸調用gcd的前面。否則,如果它在其中一個分支中結束,則返回None

您的return之後的print聲明永遠不會到達。

0

一旦執行了return語句,控件就會退出函數調用。所以你的打印語句永遠不會執行。你應該在返回之前編寫打印語句。用筆和紙做空運也會有助於執行流程。

2

實際上,對於gcdlcm,代碼可以簡單得多,因爲您的一些基本情況有重疊。

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

def lcm(a, b): 
    return a * b/gcd(a, b) 

不要忘記:對於遞歸函數,您必須使用return來鏈接遞歸調用。