2014-10-30 88 views
4

所以我遇到了遞歸的一個小問題。我發現在使用遞歸找到斐波那契數列方面存在很多問題,但我自己卻發現(大多數情況下)。然而,我掙扎的是試圖找出所有斐波那契數字的總和,直到某個值。例如,如果我輸入數字3,我應該得到四個。如果我輸入數字10,我總應該是143所以基本上:使用遞歸計算Fibonacci序列的總和MATLAB

Test Cases: 
    out1 = sumFib(3); 
    out1 = 4; 

    out2 = sumFib(10); 
    out2 = 143; 

    out3 = sumFib(28); 
    out3 = 832039 

我掙扎有點了解如何獲得基本情況(或終止因子)。這裏是我到目前爲止我的代碼:

​​

這給了我什麼數的值是第n個位置。爲了找到總和,我已經試過以下

if n==3 
out = 4 
else 
out = sumFib(n) + sumFib(n - (n-1)) 

正如你中央社可以想象,這標誌我

"Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N) to change the limit. Be aware that exceeding your available stack space can crash MATLAB and/or your computer." 

我也試着做:

function out = sumFib(n) 

if n==1 || n==2 
    out = 1; 
    else 
    out =(1+sumFib(n-1)) + sumFib(n-2) ; 
    %Gives us the value of n-1 and adds it to the value of n-2 

並使用Fibonacci序列的正確總和方面

if n==3 
     out = 4; 
    else 
     out = sumFib(n+2)-1; 
end 

在這裏,1是我試圖讓問題知道移動到下一個數字,但這是行不通的。如果有人能夠更好地向我解釋基礎條件和幫助,我會很感激。

+2

你有*使用遞歸嗎?在Stackoverflow的某處我想我看到了它的矢量化版本。不過,我可能正在做夢。 – Divakar 2014-10-30 17:12:32

+0

我必須使用遞歸。我嘗試着實際使用陣列版本,但是這並不適合我嘗試做的事情。或者我無法實現它的工作。 – 2014-10-30 17:15:13

+2

請注意以下內容:https://proofwiki.org/wiki/Sum_of_Sequence_of_Fibonacci_Numbers – Amro 2014-10-30 17:20:48

回答

3

保持簡單和分裂的功能有兩種:

function out = fib_sum(n) 
    out = fib(n+2) - 1; 
end 

function out = fib(n) 
    if n < 2 
     out = n; 
    else 
     out = fib(n-1) + fib(n-2); 
    end 
end 

(當然我假設非負整數)

+0

你知道,我真的很討厭當我複雜的事情。這比我想象的要容易十倍。這是有道理的。我很感激! – 2014-10-30 17:32:36

1

這似乎如果工作以及你輸入的整數比你有一個在測試案例少了一個 -

function out = sumFib(n) 

if n < 2 
    out = n; 
else 
    out = sumFib(n-1) + sumFib(n-2); 
end 
out = 1 + out; 

return; 

訣竅是讓該求和 - plus 1出條件語句。

樣品試驗 -

>> out1 = sumFib(2) 
out1 = 
    4 
>> out1 = sumFib(9) 
out1 = 
    143 
>> out1 = sumFib(27) 
out1 = 
     832039 

當然你也可以使用其他功能,您可以在其中做包裝它是input-integer minus 1操作,如果你打算做它的確切整數的工作,因爲你有你測試用例。