Javascript рекурсивная функция не возвращает результат - PullRequest
0 голосов
/ 13 июля 2020

Возможно, это не самая сложная проблема, но мне это интересно. Я сделал простой код, чтобы получить значение Фибоначчи на основе пользовательского ввода без рекурсии, и он работает нормально. Очень простой код:

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 ]

2 голосов
/ 13 июля 2020

Код в порядке, нужно только добавить возврат:

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);
    
}
2 голосов
/ 13 июля 2020

Просто добавьте оператор return в последнюю строку.

return fib(n,count, fibArray);
...