c++ - 斐波那契函数的问题。 C++

标签 c++ function fibonacci

应该返回数组的 n 位置。但是我得到的不是值,而是 0。

int fibonacci(int n)
{
    int f[100];
    f[0] = 0;
    f[1] = 1;

    for (int i=2; i<n; i++)
    {
        f[i] = f[i-2] + f[i-1];
    }

    return f[n];
}

int main()
{
    cout << fibonacci(3);
    return 0;
}

新代码:

新问题是它返回一个数字比它应该返回的更远。例如,如果 'n==7' 返回的是 '13' 而不是它应该返回的 '8'。

int fibonacci(int n)
{
    int f[100] = { 0, 1 };

    for (int i=2; i<=n; i++)
    {
        f[i] = f[i-2] + f[i-1];
    }

    return f[n-1];
}

int main()
{
    cout << fibonacci(7);
    return 0;
}

最佳答案

好吧,你从来没有设置f[n] , 你最多只能到 i < n , 即 i == n-1 . 尝试返回 f[n-1]

编辑:正如 Chris Lutz 指出的那样,我的回答并不好,因为如果您调用 fibonacci(0) 会给出无效结果。

正如许多人已经回答的那样,最好的解决方案是循环直到 i <= n
当然,除非你想要 fibonacci(3)返回斐波那契数列中的第三个元素而不是第四个元素,在这种情况下 fibonacci(0)没有意义,正确的返回值应该是 f[n-1] ... 仍然是 n==0案例应该以某种方式处理,n<0 也应该如此。和 n>100例。

你可以返回f[n-1]只要您检查正确的边界:

int fibonacci(int n)
{
    int f[100] = { 0, 1 };

    if ((n <= 0) || (n > 100))
        return -1;//return some invalid number to tell the caller that he used bad input

    for (int i=2; i < n; i++) // you can use i < n here
    {
        f[i] = f[i-2] + f[i-1];
    }

    return f[n-1];
}

关于c++ - 斐波那契函数的问题。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4349734/

相关文章:

c++ - 不同的 rand() 序列在表达式中产生相同的结果

javascript - 在输入字段内向 JavaScript 函数传递参数与从函数内部传递参数

javascript - javascript中函数调用的区别

c++ - 是否为函数调用中作为实际参数给出的字符数组分配了内存?

c++ - 在c/c++中非阻塞写入文件

c++ - 创建一个可以在使用时重命名的文件

c++ - 需要将 cstring 转换为 byte* 并需要将其作为 c++ 函数中的 i/p 参数传递

python-3.x - python : Compute a Huge Fibonacci Number Modulo m

haskell - 部分应用与模式匹配 : why do these Haskell functions behave differently?

python - 在Python中实现自下而上的斐波那契数列