我最近为c ++应用程序中的程序函数编写了一个代码,用于计算Fibonacci序列中的F(n)。
无论如何,我无法使用递归生成正确的结果。例如,每当我输入值5时,它返回8,如果我的其他程序代码返回5的正确值。
这是我正在使用的功能......以及我从网上获得的代码。我遇到的问题是来自网络的代码和我的代码完全相同(差不多)但是两者都给出了错误的值......
发生了什么事?
答案 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),这是你的停止条件....