我怎么能修复这个错误?

时间:2016-08-15 10:31:34

标签: c++

我尝试继续以下代码,但结果是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;
}

Fibonacci-orial

正整数上的斐波那契序列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)]的乘积。

20

的fibonacci-orial
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

3 个答案:

答案 0 :(得分:0)

只需更改一行:

EaseIn

代表

re = fib(n)*fib(n - 1);

或者你将以无限循环结束。

关于前100个阶乘数的计算,是的,您的代码可以计算它们,但结果不适合re = n * fib(n - 1); 变量。有关详细信息,SO中有多个关于计算大数的阶乘的答案:123

答案 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));
}