2016-10-07 55 views
4

我找到符合歐拉項目5此溶液(這是最小的正數,它是所有從1號的整除至20?)與整數值的可變範圍,以通過均勻地分割:如何避免在遞歸函數中手動設置變量的初始值?

def Euler5(start, end, counter): 
    x = counter 
    while start <= end: 
     if x%counter == x%start: 
      return Euler5(start+1, end, x) 
     else: 
      x += counter 
    return x 

但是,我不得不手動將計數器設置爲最小的整數值(初始值爲counter = start值)。有沒有辦法自動做到這一點,並維護算法?

回答

3

如果我理解你的話,你需要counter == start進行初始呼叫,而不必在第一次呼叫中手動指定counter

對於這一點,你可以設置counterNone默認值,並在函數開始檢查這一點,設置counter到合適的值,如果是這樣的話:

def Euler5(start, end, counter=None): 
    if counter is None: 
     counter = start 

    x = counter 
    while start <= end: 
     if x % counter == x % start: 
      return Euler5(start+1, end, x) 
     else: 
      x += counter 
    return x 
+0

哦,你是可能是正確的 – Julius

+0

如果確實是這樣,我會很感激。 ;) – dkasak

+1

你去... – Julius