递归Fibonacci序列

A55*_*666 2 c++ recursion fibonacci

所以我写了一个递归程序,询问用户现在要执行的许多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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是序列的输出:

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
Run Code Online (Sandbox Code Playgroud)

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

sch*_*der 9

你遇到了问题,因为数据类型 int,你正在使用的32位,只能容纳值高达2 ^ 31-1 = 2147483647时signed(默认情况下,使用31位,1位被占用指示符号性,这也解释了负数),2 ^ 32-1 = 4294967295时unsigned.你可以在这里使用64位数据类型(long long在大多数情况下),但是稍后也会遇到这个问题(我认为第94个斐波纳契数字附近).

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

  • 此外,最好使用`unsigned`类型来表示不能否定的事情. (4认同)