2017-03-02 14 views
0

我想出瞭如何使用gcf函數來實現。但是,我需要用遞歸創建一個帶有兩個參數「x」和「y」的LCM函數。這是我到目前爲止有:在Python中尋找編碼最低公共多功能而無GCF功能的幫助

def lcm(x, y, counter=1): 
    if (counter%x == 0 and counter%y == 0): 
     return counter 
    return lcm(x, y, counter+1) 

我想知道我是否能在不使用第三個參數,「計數」創建一個類似的功能。

謝謝。

回答

0

如何包裝該功能在while循環與局部變量:

def lcm(x, y): 
    counter = 1 
    while True: 
     if (counter%x == 0 and counter%y == 0): 
      return counter 
     counter += 1 
0

這個怎麼樣?

def lcmnoparam3(x,y): 
    #SORT 
    if x>y: 
     x,y = y,x 
    a = x 
    while(x%y != 0): 
     x = x+a 
    return x 
3

您可以檢查以下興田做的伎倆

def lcm(x, y): 
    if y > x: 
     x, y = y, x 
    r = x % y 
    if r == 0: 
     return x 
    else: 
     return x * lcm(y, r) // r 
+1

非常感謝您的幫助!這正是我所期待的。我通過它瞭解了該函數用於獲取LCM的步驟。但是,我不太清楚它背後的數學邏輯。除以r的目的有助於發現LCM? – eukoloko

+0

@eukoloko那麼最簡單的方法就是用gcd來考慮它:lcm(x,y)= xy/gcd(x,y)= xy/gcd(y,r)= xy /(yr/lcm (y,r))= x/r lcm(y,r)。這裏我們使用了gcd(x,y)= gcd(y,r)的事實。 –

+0

感謝您的幫助。我正在擺弄它,並想知道是否有一種方法可以通過每次增加原始x值來實現lcm函數?例如,如果(x,y)是(7,5),檢查(14,5),然後檢查(21,5),然後檢查(28,5),然後檢查(35,5)。 35%5 == 0,因此返回x。我用這種方法的問題是,我不知道如何爲每個遞歸添加原始的x。 – eukoloko

0

你可以只是這樣做:

def lcm(x, y): 
    if x > y: 
     a = x 
    else: 
     a = y 

    while(True): 
     if((a % x == 0) and (a % y == 0)): 
      lcm = a 
      break 
     a += 1 

    return lcm 
+0

@StefanPochmann謝謝你指出我,我編輯它。 –