这也许不是最大的挑战性问题,但我对此感到很好奇。 我做了一个简单的代码,只是为了基于用户输入获得斐波那契值,而无需递归,并且效果很好。很简单的代码:
function fib(n) {
let fibArray = [0,1];
let count = 0;
while(fibArray.length <= n){
let previous = fibArray[count + 1];
let beforePrevious = fibArray[count];
fibArray.push(beforePrevious + previous);
count++;
}
return fibArray[n];
}
但是,当我尝试将其作为递归函数使用时,结果是不确定的,即使该值不是。
function fib(n, count = 0, fibArray = [0,1]){
if(fibArray.length - 1 === n){
return fibArray[n];
}
if (fibArray.length <= n ) {
let previous = fibArray[count + 1];
let beforePrevious = fibArray[count];
fibArray.push(beforePrevious + previous);
count++;
}
fib(n,count, fibArray);
}
答案 0 :(得分:2)
只需在最后一行添加return
语句。
return fib(n,count, fibArray);
答案 1 :(得分:2)
代码还可以,您只需要添加一个退货:
function fib(n, count = 0, fibArray = [0,1]){
if(fibArray.length - 1 === n){
return fibArray[n];
}
if (fibArray.length <= n ) {
let previous = fibArray[count + 1];
let beforePrevious = fibArray[count];
fibArray.push(beforePrevious + previous);
count++;
}
return fib(n,count, fibArray);
}