我怎样才能修正这个错误呢?

How could I fix the error?

本文关键字:错误      更新时间:2023-10-16

我尝试进行以下代码,但结果是分割故障(核心转储)。我该如何修复这个错误?另外,我的代码会产生100的斐波那契级数吗?我的代码如下:

#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 h1> 整数上的斐波那契数列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

正整数的斐波那契数列是[F(1), F(2),…]的乘积F (n)] .

20

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

修改行:

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

re = n * fib(n - 1);

,否则你将陷入无限循环。

关于前100个阶乘数的计算,是的,您的代码可以计算它们,但结果将不适合int变量。要了解更多信息,在SO中有多个关于计算大数的阶乘的答案:1,2,3。

您应该更改行Re = fib(n) * fib(n - 1);

成:Re = fib(n-2) + fib(n- 1);

我认为,fibonacci是用加法计算的-通过调用fib(n-2)而不是fib(n),你删除了无穷无尽的递归函数调用-我认为,它匹配fibonacci的正确算法。

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