繁体   English   中英

递归查找斐波那契数的总和

[英]Finding sum of fibonacci numbers recursively

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

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 语法的能力的作业,而不是编写递归函数)

由于没有其他人愿意回答您的问题,因此您可以:

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;
}

如果你想要一个只涉及 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;
}

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

我想这会很好用

 int fib_sum (int n){ if(n<=1) { return n; } else { return fib_Sum(n-1) + fib_Sum(n-2) + 1; } }

请记住,元素的计数从 0 开始,因此元素 0 1 1 2 3 5 8 13 然后位置 0 1 2 3 4 5 6 7 所以如果 n = 5,则总和 = (0+1+1+2+3+ 5)=12

递归函数将是: int fib_sum (int n){ if(n<=1) { return n; } else { return fib_Sum(n-1) + fib_Sum(n-2) + 1; } } int fib_sum (int n){ if(n<=1) { return n; } else { return fib_Sum(n-1) + fib_Sum(n-2) + 1; } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM