在数组中递归查找最大值。

25 浏览
0 Comments

在数组中递归查找最大值。

我正在尝试使用递归来在JavaScript中找到数组中的最大值。我创建了这个函数,但是无法弄清楚如何递归地实现它。

function Max(a) {
  var a = [2,3,5];
  return Math.max.apply(Math, a);
}

0
0 Comments

问题的出现原因是在比较数组中的两个数字并删除较小的数字时,如果有两个相邻的数字相等,会导致原始数组被修改,只剩下最大值。

解决方法是在删除较小数字之前,先创建一个数组的副本,然后对副本进行操作,以保持原始数组的完整性。这样,在递归调用函数时,传递的是副本数组而不是原始数组。这样可以确保在每次递归调用时,都是在一个新的数组中进行比较和删除操作,而不会破坏原始数组。

以下是修改后的代码:

function max(numArray) 
{
    // copy the given array 
    nums = numArray.slice();
    // base case: if we're at the last number, return it
    if (nums.length == 1) { return nums[0]; }
    // check the first two numbers in the array and remove the lesser
    if (nums[0] < nums[1]) { nums.splice(0,1); }
    else { nums.splice(1,1); }
    // with one less number in the array, call the same function
    return max(nums);
}

现在,这个递归函数可以正确地找到数组中的最大值,而不会破坏原始数组。通过创建副本数组并在副本上进行操作,可以确保每次递归调用时都在一个新的数组中进行比较和删除操作。这样,无论数组中是否存在相邻的相等值,都不会影响递归函数的正确性。

0
0 Comments

ES6语法使这个问题的解决变得非常简洁。通过递归的方式,我们可以找到一个数组中的最大值。该函数被命名为findMax,它接受一个数组作为参数。在函数内部,我们首先检查传入的参数是否为一个数组,如果不是,则抛出异常。然后,我们检查数组的长度,如果长度为0,则返回undefined。接下来,我们使用ES6的解构赋值,将数组的第一个元素赋给head变量,将剩余的元素赋给tail变量。然后,我们再次检查数组的长度,如果长度为1,则返回head。否则,我们通过递归调用findMax函数,并将tail作为参数传入。我们将递归调用的结果与head进行比较,如果head大于递归调用的结果,则返回head,否则返回递归调用的结果。通过这种方式,我们可以找到数组中的最大值。

这个问题的出现的原因是我们需要在一个数组中找到最大值。递归是一种可以解决这类问题的技术。通过递归,我们可以将一个大问题分解成更小的问题,并通过解决更小的问题来解决原始的问题。在这个特定的问题中,我们将一个数组分成头部和尾部两个部分,并递归调用函数来找到尾部部分的最大值。然后,我们将头部部分的最大值与尾部部分的最大值进行比较,以确定整个数组的最大值。通过不断地将问题分解成更小的问题,并通过递归调用函数来解决它们,我们最终可以找到整个数组的最大值。

通过使用ES6的解构赋值和递归技术,我们可以编写出一个简洁而高效的函数来找到数组中的最大值。该函数接受一个数组作为参数,并通过将数组分解成更小的问题,并递归调用函数来解决它们,最终找到整个数组的最大值。这种解决方法可以应用于任何大小的数组,并且可以在不同的编程语言中实现。

0
0 Comments

问题的出现原因是需要在给定的数组中找到最大值,而且要使用递归的方式来解决。解决方法是通过递归调用函数,每次将数组中的第一个元素剔除,并将剩余的数组作为参数重新调用函数,直到数组长度为2。然后返回两个元素中的较大值,并完成之前的部分计算。

0