首页 > 解决方案 > 函数没有返回任何值

问题描述

我需要编写一个递归函数,它应该返回给定数组中的最大数字,我正在使用方法 .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

标签: javascriptfunctionrecursion

解决方案


您需要返回递归的结果:

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)


推荐阅读