2017-03-03 71 views
-2

我在理解遞歸方面有點麻煩,所以任何幫助/理解都將非常感謝。我正在嘗試編寫一個代碼,其中兩個非數字會相乘。聽起來很簡單,儘管除了在兩個初始函數中使用(除之外)之外,將使用NO(*,+或 - )運算符。這些用於將n加n 2次,直到n_2​​的值。乘法遞歸

例:3 + 4> 3 + 1 + 1 + 1 + 1 = 7

n = int(input()) 
n_2 = int(input()) 

def inc(n): 
    return n + 1 

def dec(n): 
    return n - 1 

有然後必須調用返回到先前的兩個功能的附加功能,再不能使用( *,+或 - )。然後使用這個加法函數通過使用add函數基本上將n乘以n_2次來「分散」單獨函數中的數字。

謝謝!

更新:人們評論說,我問這是爲了獲得作業答案/作弊。我正在問這個問題,以瞭解遞歸併獲得有關難題的幫助。你不需要用完整的代碼來回答這個問題,我只是要求幫助我指導我理解這個主題。具體說明了遞歸如何運作,並對問題提供了一點指導。問題是,我正在尋找解決使用遞歸的例子。

+1

做你自己的功課。或者在大學時交朋友來取而代之。 –

+0

你會從做這項工作中學到更多,而不是要求別人去做。 –

+0

嘗試先考慮解決方案。 – jtitusj

回答

0

如果您不習慣遞歸作爲一個概念,它可能有助於從使用您擁有的工具的迭代解決方案開始。你已經意識到,你可以表達3 + 4爲3 + 1 + 1 + 1 + 1,並寫在Python是使用循環的一種方法:

def iterative_add(n, n_2): 
    for _ in range(n_2): 
     n = inc(n) 
    return n 

現在,我們需要打開這成了一個遞歸的解決方案。遞歸解決方案的決定性特徵是,不是找出多少次重複某個事情,而是做一點問題,並且再次調用自己來執行其餘的部分。在這裏,明顯的一點,我們所能做的就是調用inc一次,然後我們再次調用同一個函數做下inc - 所以我們開始是這樣的:

def recursive_add(n, n_2): 
    return recursive_add(inc(n), n_2) 

這顯然會繼續下去,永遠,所以我們需要考慮如何讓它停止。在迭代版本中,當我們調用inc完全爲n_2時,我們停止,但在這裏我們沒有任何明顯的方式來跟蹤我們調用它的次數。一個好的方法是考慮分解3 + 4 = 3 + 1 + 1 + 1 + 1,並認識到一旦我們添加了第一個1,剩下的問題就是(3 + 1)+(1 + 1 + 1 )= 4 + 3。所以我們每次遞減n_2,在每一步有效地將右邊括號中的'1'移到左邊,以便下一個將是((3 + 1)+1)+(1 + 1)。當右括號爲空時,我們可以停止。

在Python中,我們可以這樣寫:

def recursive_add(n, n_2): 
    if n_2 == 0: 
     return n 
    return recursive_add(inc(n), dec(n_2)) 

值得注意的是遞歸的工作方式是 「建立」 的表述((((3 + 1)+1)+1 )+1),然後開始從最內側的括號開始評估它。如果你可以圍繞這個概念進行思考,你應該能夠以同樣的方式輕鬆地編寫一個遞歸乘法解決方案。

+0

謝謝!!!正是我所尋找的,比其他在線例子更容易理解。這有助於很多!再次謝謝你! – BorutoUzumaki