【发布时间】:2020-10-12 12:07:33
【问题描述】:
下面的程序旨在使用递归函数打印斐波那契数列的前 25 项。 我得到了输出,但问题是程序没有停止,一旦它们变大,值就会变成负值。
#include <stdio.h>
int fibo(int, int, int);
int main()
{
int s, c, i;
s = 1;
c = 0;
i = 0;
fibo(s, c, i);
}
int fibo(int s, int c, int i)
{
for(i = 0; i <= 25; i++)
{
s = s + c;
c = s - c;
printf("%d\n", s);
fibo(s, c, i);
}
}
预期输出:
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
我的输出:
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
-1408458269
1776683621
368225352
2144908973
-1781832971
363076002
-1418756969
-1055680967
1820529360
764848393
-1709589543
-944741150
1640636603
695895453
-1958435240
-1262539787
1073992269
-188547518
885444751
...
【问题讨论】:
-
将数据类型从 int 更改为 long 或大于整数的类型。从技术上讲,斐波那契将从递归中打印多达 45 个。之后,您需要动态编程来打印值。
-
per fibonacci sequence 斐波那契数列以:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34,...不是问题所描述的斐波那契数列。斐波那契数列的规则是:xn = xn−1 + xn−2 -
关于;
for(i = 0; i <= 25; i++)这个循环将迭代 26 次,而不是 25 次。建议:for(i = 0; i < 25; i++) -
for()循环,递归将“嵌套”一些 26! (阶乘)次。即使数值没有溢出它们的内容,可用的“堆栈”也会溢出,导致程序崩溃