C++斐波那契程序

C++ Fibonacci Program

本文关键字:程序 C++      更新时间:2023-10-16

谁能告诉我为什么我会提前得到序列中的一个数字?我似乎找不到问题所在!例如,如果你输入 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 个数字都没有关系。