java 递归求解数组中的最大值,递归查找数组中的最大值

I am trying to use recursion to find the maximum value in an array in JavaScript. I created the function, but cannot figure out how to do it recursively.

function Max(a) {

var a = [2,3,5];

return Math.max.apply(Math, a);

}

解决方案

Here is an example of a recursive function that takes an array of numbers and compares the first two, removes the lesser, and then calls itself again on the given array minus the removed number.

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分治法是一种解决问题的思想,它将问题分解成若干个小的问题,然后递归求解这些小问题,最终将这些小问题的结果合并起来得到原问题的解。对于求解数组的最大值和最小值,可以采用分治法来实现。 具体实现思路如下: 1. 将数组分成两部分,分别出左半部分的最大值和最小值,以及右半部分的最大值和最小值。 2. 将左半部分的最大值和右半部分的最大值进行比较,取其中较大的一个作为数组的最大值。 3. 将左半部分的最小值和右半部分的最小值进行比较,取其中较小的一个作为数组的最小值。 4. 返回最大值和最小值。 代码实现如下: ```python def find_max_min(arr, left, right): # 如果数组只有一个元素,直接返回该元素作为最大值和最小值 if left == right: return arr[left], arr[left] # 如果数组只有两个元素,比较它们的大小并返回最大值和最小值 if left + 1 == right: if arr[left] > arr[right]: return arr[left], arr[right] else: return arr[right], arr[left] # 如果数组有多个元素,将数组分成两部分,分别出左半部分和右半部分的最大值和最小值 mid = (left + right) // 2 left_max, left_min = find_max_min(arr, left, mid) right_max, right_min = find_max_min(arr, mid+1, right) # 比较左半部分的最大值和右半部分的最大值,取其中较大的一个作为数组的最大值 if left_max > right_max: max_val = left_max else: max_val = right_max # 比较左半部分的最小值和右半部分的最小值,取其中较小的一个作为数组的最小值 if left_min < right_min: min_val = left_min else: min_val = right_min return max_val, min_val ``` 调用函数: ```python arr = [5, 3, 8, 2, 9, 1] max_val, min_val = find_max_min(arr, 0, len(arr)-1) print("最大值为:", max_val) print("最小值为:", min_val) ``` 输出结果: ``` 最大值为: 9 最小值为: 1 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值