递归地查找斐波纳契数的总和

时间:2014-02-09 20:28:18

标签: algorithm recursion

我有点卡在这里。我知道可以递归地找到特定的斐波那契数:

int fib (int n)
{
    if (n <= 1)
        return n;

    else 
        return fib(n-1) + fib(n-2);
}

我知道迭代地我可以调用该函数n次以找到斐波纳契数的总和

int sum = 0;
for (int i = 0; i < n; i++)
{
    sum += fib(i);
}

但是我很难想出一个递归函数来找到总和。我不认为它与原始的斐波纳契函数有很大的不同。 (这是为了提高我编写ocaml语法的能力,而不是编写递归函数)

3 个答案:

答案 0 :(得分:4)

由于没有其他人在回答您的问题,所以请转到:

int fib_sum(int n)
{
    if (n == 0)
        return 0;
    if (n == 1)
        return 1;
    return fib_sum(n-1) + fib_sum(n-2) + 1;
}

答案 1 :(得分:3)

如果你想要一个只涉及fib_sum()的递归解决方案,这里有一个:

int fib_sum (int n)
{
    if (n == 0)
        return 1;
    if (n == 1)
        return 2;
    return fib_sum(n-1) + fib_sum(n - 2) + 1;
}

答案 2 :(得分:3)

观察到fib_sum(n)== fib(n + 2) - 1你可以使用或多或少相同的函数。