2016-03-25 27 views
0

是的這是作業。我不是要求任何簡單的答案,只是幫助朝着正確的方向前進。這裏是賦值:「創建一個接收兩個數字的函數:a和b,該函數計算並返回a和b之間所有數字的相乘,創建該函數的三個版本。」 我使用for循環和while循環創建了函數,但我很遺憾如何使用遞歸 - 作業的最後部分。使用遞歸在兩個給定變量之間乘以所有整數

+0

發佈您的代碼。 –

回答

3

承認這是一個家庭作業的問題。因此,雖然我不會給你答案,但我會給你一些指示。

當編寫一個遞歸函數,都需要考慮兩個關鍵的東西:

  1. 什麼停止遞歸,
  2. 會發生什麼,直到遞歸停止

在你的情況,其中,你必須計算一個數字列表的產品,這可以解釋爲:

  1. 應該怎樣該函數在列表中只有一個項目時執行? (即:當a和b相同時)
  2. 如何將一個元素乘以列表的其餘部分的乘積?

要獲得額外功勞,請查找尾遞歸併瞭解爲什麼它可以幫助您減少內存使用量。

這會給你足夠的開始嗎?

0

這是一個簡單的dynamic programming實例 - 您從一個問題開始,嘗試通過將問題分解爲易於解決和組合結果的問題來解決問題。

然後,您通常可以通過反向工作來攻擊這些問題:最簡單的情況是什麼,您可以立即回答?如果問題比這更難解決,你會怎麼做?

正如您已明確告訴您要找到遞歸解決方案,您可以假設您正在尋找一種方法,可以直接返回結果,或者必須使用修改後的參數調用其自身,並對結果進行處理得到它自己的。

如果這個問題有點虛幻,那麼考慮查看一下如何從字面上實現一個使用遞歸結構的for循環,然後直接調整現有的for循環。對解決問題的本質並沒有深思熟慮,只是看看如何以不同的方式表達現有的解決方案。

-1
function recursiveMultiplication(num1, num2) { 
    if (num2 == num1) { 
     return num2; 
    } 

    return num2 * recursiveMultiplication(num1, num2 - 1); 
} 
console.log(recursiveMultiplication(5, 8)); 
+0

說實話,我已經學會了今天的遞歸。所有你需要的是奉獻和辛勤工作。但不要自己做所有事情瞭解其他人如何以這種方式進行編碼,您將以更簡單的形式劃分問題:D –

+0

http://stackoverflow.com/questions/30589132/recursion-control-flow –

相關問題