您的代码有2个问题:
结果存储在只能处理前48个斐波那契数字的int中,此后整数填充减位,结果是错误的。
但是您永远无法运行fibonacci(50)。
该代码
fibonacci(n - 1) + fibonacci(n - 2)
是非常错误的。
问题是它调用斐波那契的次数不是50次,而是更多次。
首先,它 每次调用fibonacci(n)越差,就称为fibonacci(49)+ fibonacci(48),
其次称为fibonacci(48)+ fibonacci(47)和fibonacci(47)+ fibonacci(46)
,因此复杂度是指数级的。
非递归代码的方法:
double fibbonaci(int n){
double prev=0d, next=1d, result=0d;
for (int i = 0; i < n; i++) {
result=prev+next;
prev=next;
next=result;
}
return result;
}