Javascript递归函数未返回结果

时间:2020-07-13 15:57:53

标签: javascript recursion fibonacci

这也许不是最大的挑战性问题,但我对此感到很好奇。 我做了一个简单的代码,只是为了基于用户输入获得斐波那契值,而无需递归,并且效果很好。很简单的代码:

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);
    
}

2 个答案:

答案 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);
    
}
相关问题