从1和2开始,计算所有偶数斐波那契数的和(当这些数小于或等于4百万时)
我试着把所有偶数斐波那契数列相加到4e6
,但是它没有给予我任何正确的结果,我不知道我哪里搞砸了,在我看来,if
的条件是正确的。
下面是我的fibonacci()
函数,也就是对偶数求和的函数。
int fibonacci(int k) //compute the k-th fibonacci number (with EulerProject formula)
{
if (k == 1 || k == 2)
{
return k;
}
{
return (fibonacci(k-1)+ fibonacci(k-2));
}
}
int evenfibonacci()
{
int result = 0;
for (int k = 1; fibonacci(k)<=4e6;) {
if (fibonacci(k)%2 == 0 ) {
result += fibonacci(k);
k++;
} else {
k++;
}
}
}
1条答案
按热度按时间kwvwclae1#
evenfibonacci()
声明为返回int
值,但实际上return
没有任何内容,这是 undefined behavior。因此,返回值总是 indeterminate,它最终返回随机垃圾,这就是为什么您永远不会得到好结果的原因。您需要添加
return
语句,例如:Online Demo
也就是说,每次循环迭代调用
fibonacci(k)
3次是非常低效的,因为要反复计算相同的值,尤其是对于k
的较大值。Online Demo
当然,更好的解决方案是完全去除
fibonacci()
,而代之以使用迭代方法来每次迭代仅计算新值,例如:Online Demo