【问题标题】:function is not returning any value函数没有返回任何值
【发布时间】:2019-05-09 04:25:46
【问题描述】:

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

【问题讨论】:

  • 一个观察,需要在每次递归调用前加上return,例如:return findMax(arr);
  • 你为什么要使用splice?如果您只想找到最大值,则无需修改数组。
  • 此外,在不需要的地方使用递归并不是一个好主意。我建议使用.reduce()

标签: javascript function recursion


【解决方案1】:

需要返回递归的结果:

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)

【讨论】:

  • 谢谢,Mark 和 Shidersz 我知道我的解决方案不是最漂亮的,我只是在尝试学习递归,我只是担心返回的女巫让我发疯 LOL 非常感谢大家
猜你喜欢
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多