函数未返回任何值

时间:2019-05-09 04:25:46

标签: javascript function recursion

我需要编写一个递归函数,该函数应返回给定数组中的最大数字, 我正在使用.splice()方法删除较小的数字。当我的数组中只有一个元素时,我将返回该元素巫婆将是数组中最大的数字

逻辑似乎可行,但没有返回任何东西,任何想法?

function findMax(arr){
    // This function returns the largest number in a given array
     if (arr.length === 1){
        const bigNum = arr.pop();
        return bigNum
    }
    else if (arr[0] > arr[1]){
        arr.splice(1,1)
        findMax(arr)
    }
    else{
        arr.splice(0,1)
        findMax(arr)    
        }

}

y = findMax([1,6,8,2,10,5]);

y
undefined

1 个答案:

答案 0 :(得分:5)

您需要返回递归的结果:

function findMax(arr){
    // This function returns the largest number in a given array
     if (arr.length === 1){
        const bigNum = arr.pop();
        return bigNum
    }
    else if (arr[0] > arr[1]){
        arr.splice(1,1)
        return findMax(arr)
    }
    else{
        arr.splice(0,1)
        return findMax(arr)    
        }

}

y = findMax([1,6,8,2,10,5]);
console.log(y)

如果您正在寻找更简单的方法,另一种选择是直接与递归的结果进行比较并返回最大的值:

function findMax(arr){
    // This function returns the largest number in a given array
    if (arr.length <=1) return arr[0]
    
    let [head, ...rest] = arr

    let rec = findMax(rest)
    return head > rec ? head : rec
    // or just:
    // return Math.max(head, findMax(rest))

}

y = findMax([10, 9, 14, 3, 1, -2]);
console.log(y)