2017-06-01 22 views
2

馬上就好了,這不是一個家庭作業問題。我在空閒時間練習遞歸問題,並且仍然在圍繞這個概念進行思考。我非常接近解決這個問題,但當我將它們加在一起時,我無法弄清楚如何跳過根整數'n'。這是迄今爲止代碼:如何使用遞歸求和一個給定整數以下的所有整數

var sumBelow = function (n) { 
    console.log(n); 
    // base case 
    if (n === 0) { 
     console.log('we hit the base case'); 
     return 0; 
    } 
    // initialize var to hold sum 
    if (!sum_sumBelow) var sum_sumBelow = 0; 
    // add numbers 
    sum_sumBelow = n + sumBelow(n - 1); 
    return sum_sumBelow; 
}; 

console.log('answer is', sumBelow(4)); 

當我打電話 'sumBelow(4)' 我要的是3 + 2 + 1,但我目前得到4 + 3 + 2 + 1。

如何跳過根參數?

+1

只需要調用「sumBelow(n-1)」並調用「sumbelow(4)」的另一個函數「sumbelow(n)」。 – mimre

+1

不是你要求的,但是「初始化var」if語句不是必須的:sum_sumBelow變量不在遞歸調用中傳遞,它只適用於當前調用。你可以完全移除這個變量,只是'return n + sumBelow(n -1)'。 – nnnnnn

+0

@nnnnnn感謝您指出了這一點!將記住這一點 –

回答

3

假設你要打印的一切正確的什麼是錯的只是改變:

sum_sumBelow = n + sumBelow(n - 1); 

sum_sumBelow = n - 1 + sumBelow(n - 1); 

在你的榜樣; answer is 6將被輸出在控制檯,這是3 + 2 + 1如你所願?

N.B.絕不是這是最好的遞歸解決方案,但它仍然是一個。

下面是@RobG提供您的整體功能的等效它採用了三元:

function sumBelow(n) {return n? n-1 + sumBelow(n-1) : 0} 
2

最簡單的解決辦法是兩個單獨的函數:

function sumUntil(n) { 
    return n<=0 ? 0 : n + sumUntil(n-1); 
} 
function sumBelow(n) { 
    return sumUntil(n-1); 
} 

但你也可以降低所有號碼由一個:

function sumBelow(n) { 
    return n<=1 ? 0 : (n-1) + sumUntil(n-1); 
} 
// equivalent to 
function sumBelow(n) { 
    const m = n-1; 
    return m<=0 ? 0 : m + sumUntil(m); // make sure not to use m-1 for the recursive call 
} 
0

對您的代碼的一點改變將mee你的想法。

更改的行

sum_sumBelow = n + sumBelow(n - 1); 

sum_sumBelow = n + sumBelow(n - 1) - 1 ; 
0

只考慮第一次迭代,你說

sum_sumBelow = n + sumBelow(n - 1); 

正如你所看到的,所添加N,但你實際上想要比n少加1。因此,你會寫

sum_sumBelow = n-1 + sumBelow(n - 1); 

然後,在每次迭代中,您將減少1。因此,而不是4 + 3 + 2 + 1,您將獲得3 + 2 + 1 + 0.

您可能希望將基本情況更改爲n === = 1而不是0,因此您不添加零,但它並不重要。

1

嘿安吉拉你可以跳過根從下一個整數開始遞歸。

var sumBelow = function (n) { 
    return sum(n - 1); 
}; 

function sum (n) { 
    if (n === 0) return 0; 
    return n + sum(n - 1); 
} 

遞歸函數的思想是隻用我們重複提供的狀態/參數執行自己。所以一個遞歸函數本身不能指出什麼要跳過,除非我們專門在外部說明它。我做了一個demo,所以你可以試試看。

相關問題