C++斐波那契程序

C++ Fibonacci Program

谁能告诉我为什么我会提前得到一个序列号?我似乎找不到问题所在! 例如,如果您输入 10,您应该得到 34,但得到 55(前面一个数字,即 11)

#include <iostream>
using namespace std;

int fibonacci (int n);

int main ()
{
    int n;
    cout << "Fibonacci number generator" << endl;
    cout << "Which one do you want (0 to exist)?";
    cin >> n;
    cout << fibonacci(n);
}


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

这取决于您如何定义第一个数字。

在你的代码中,它看起来是从 1 开始的,所以第 10 个元素输出 55​​ 没有错。

1, 1, 2, 3, 5, 8, 13, 21, 34, 55

但是,我认为你不小心把它弄对了,我猜你想做的是:

#include <iostream>
using namespace std;
int fibonacci (int n);

int main () {
    int n;
    cout<<"Fibonacci number generator"<<endl;
    cout<<"Which one do you want (0 to exist)?";

    cin>>n;
    if(n == 0) {
        return 0;
    }
    cout<<fibonacci(n);

    return 0;
}

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

  • 输入为0时退出
  • 顺序是这样的:0, 1, 1, 2, 3, 5, 7, 13, 21, 34

斐波那契数列曾经是:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55

但在现代它已经演变为:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55

https://en.wikipedia.org/wiki/Fibonacci_number

如果使用第一个序列,则种子定义为:

F(1) = 1
F(2) = 1

如果使用第二个序列,种子定义为:

F(0) = 0
F(1) = 1

只要我们都同意F(10)55,它是(第一个)序列中的第10个数字还是(第一个)序列中的第11个数字都没有关系第二)序列。