递归Fibonacci ..不知道发生了什么

时间:2012-03-12 05:34:57

标签: c++ recursion fibonacci

我最近为c ++应用程序中的程序函数编写了一个代码,用于计算Fibonacci序列中的F(n)。

无论如何,我无法使用递归生成正确的结果。例如,每当我输入值5时,它返回8,如果我的其他程序代码返回5的正确值。

这是我正在使用的功能......以及我从网上获得的代码。我遇到的问题是来自网络的代码和我的代码完全相同(差不多)但是两者都给出了错误的值......

http://codepad.org/pMKs4kvb

发生了什么事?

3 个答案:

答案 0 :(得分:3)

嗯,简单地说,你的功能是打印出以下系列:

1, 1, 2, 3, 5, 8 ...

因此,F(5) = 8(如果我们在这里说零索引)。如果您想要打印以下内容:

0, 1, 1, 2, 3, 5, 8 ... 

OEIS认可的序列是什么,那么您需要做的就是确保定义F(0) = 0。在这种程度上,您的功能应该只是:

int FibiRec(int n) {
    if (n == 0 || n == 1) {
        return n; // IMPORTANT
    } else {
        return FibiRec(n-1) + FibiRec(n-2);
    }
}

同时我想补充一点:你的函数的时间复杂度很O(2^n)。有了你的功能,尝试生成第40或第100个斐波那契数字,你就会意识到我在说什么。

答案 1 :(得分:0)

您的编号从0开始...而程序编号从1开始

n:0,1,2,3,4,5

F(n):1,1,2,3,5,8

答案 2 :(得分:-1)

我猜您需要在if循环中添加另一个条件n==2 ...您的程序应该是......

int FibiRec(int n){
        int result = 0;
        if (n == 0 || n == 1 || n==2){
            return 1;
        }else{
            return FibiRec(n-1) + FibiRec(n-2);
        }
    }

这是因为,对于n = 2,将调用FibiRec(1)和FibiRec(0),这是你的停止条件....