我尝试继续以下代码,但结果是Segmentation fault(core dumped)。我怎么能修复这个错误?另外,我的代码会产生100的fibonacci-orial吗?我的代码如下。
#include <iostream>
using namespace std;
int fib(int);
int main()
{
int n;
int result[100];
for (int i=0;i<100;i++){
result[i] = fib(i);
} for (int i=0;i<100;i++){
cout << i+ 1 << " : " << result[i] << endl;
}
}
int fib(int n){
int re;
if (n==0||n==1){
re = 1;
} else{
re = fib(n)*fib(n - 1);
}
return re;
}
正整数上的斐波那契序列F(n)定义如下:
1. F(1) = 1
2. F(2) = 1
3. F(n) = F(n-1) + F(n-2), where n is an integer and n > 2
正整数的Fibonacci-orial是[F(1),F(2),...,F(n)]的乘积。
n Fibonacci-orial of n
1 1
2 1
3 2
4 6
5 30
6 240
7 3120
8 65520
9 2227680
10 122522400
11 10904493600
12 1570247078400
13 365867569267200
14 137932073613734400
15 84138564904377984000
16 83044763560621070208000
17 132622487406311849122176000
18 342696507457909818131702784000
19 1432814097681520949608649339904000
20 9692987370815489224102512784450560000
答案 0 :(得分:0)
只需更改一行:
EaseIn
代表
re = fib(n)*fib(n - 1);
或者你将以无限循环结束。
关于前100个阶乘数的计算,是的,您的代码可以计算它们,但结果不适合re = n * fib(n - 1);
变量。有关详细信息,SO中有多个关于计算大数的阶乘的答案:1,2,3。
答案 1 :(得分:0)
你应该改变这条线 re = fib(n)* fib(n - 1);
成: re = fib(n-2)+ fib(n-1);
我认为,斐波纳契是用加法计算的 - 通过调用fib(n-2)而不是fib(n),你删除了无穷无尽的递归函数调用 - 我认为,它与斐波那契的正确算法相匹配。 / p>
答案 2 :(得分:0)
int main()
{
int n;
int result[100];
int iPrevResult = 1;
for (int i=0;i<100;i++)
{
iPrevResult = iPrevResult* fib(i);
result[i] = iPrevResult;
}
for (int i=1;i<100;i++)
{
cout << i+ 1 << " : " << result[i] << endl;
}
}
int fib(int n){
if (n<=1){
return 1;
}
return (fib(n-1) +fib(n-2));
}