c++ - 递归斐波那契数列

标签 c++ recursion fibonacci

所以我编写了一个递归程序,询问用户现在他们想要执行多少斐波那契数列。我遇到的问题是,在第 45 个数字之后,它给了我一个带有“-”的数字,它是一个不符合序列的数字。我怎样才能改变它给我正确的数字?这是执行计算的代码的递归部分:

void fibonacci (int a, int b, int n, int count)
{
    if(n < count) 
    {
        cout<<a+b<<endl;
        fibonacci(b, a+b, n+1, count);
    }
}

这是序列的输出:

How many numbers do you want the Fibonacci sequence to process: 50
The starting numbers for the sequence are: 0, 1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
-1323752223
512559680
-811192543
-298632863
-1109825406

我需要做哪些更改才能将 -# 更改为实数?

最佳答案

你遇到问题是因为 datatype您使用的 int 是 32 位的,当 signed 时最多只能保存 2^31-1 = 2147483647 的值(默认,使用 31 位,1 位被占用指示 signedness ,这也解释了负数),当 unsigned 时,2^32-1 = 4294967295。您可以在此处使用 64 位数据类型(在大多数情况下为 long long),但稍后也会遇到此数据类型的问题(我认为大约是第 94 个斐波那契数)。

这个问题的“真正”解决方案是编写您自己的数值计算方法并使用自己的数字表示法,例如字符数组。您还可以寻找使用“bignum”库的各种可能性之一。您应该在一些 SO 问题中找到有关此的更多信息,例如 this one .

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

相关文章:

android - 如何在 Flutter 的原生 C++ 中使用 OpenCV 4(2021 年)(支持 Flutter 2.0)?

c - 如何将剩余的 for 循环更改为递归函数?

haskell - 不使用 zipWith 的斐波那契数

algorithm - 查找递归程序的加法步骤数

c++ - ROS订阅者一直阻塞回调

c++ - GNU 调试器不显示 C++ 结构中的所有数据

c++ - 有什么方法可以使用用户定义的 operator< 对结构在 QSortFilterProxyModel 中对该结构的 QVariants 进行排序?

c# - 汇总所有节点

javascript - Firefox 书签探索不会超过 Javascript 的第一级

javascript - 为什么我的函数将一个值推得太大?