2014-10-30 93 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操作,如果你打算做它的确切整数的工作,因为你有你测试用例。