使用递归查找数组中的最大整数

时间:2014-02-12 05:15:03

标签: java arrays recursion

我甚至不知道从哪里开始练习。我一直在看它2个小时而不知道该怎么做。我被告知要编写一个采用整数数组和一系列索引(低和高)的方法。

我已经得到提示,基本情况应该是low == high时,最大值返回范围内的值(应该是array[low])。然后,如果我们在数组的范围内有多个元素,我们可以将其拆分,找到每个片段中的最大值并找到最大值。但是,我不知道该怎么办。我尝试通过定义两个新数字maxRange(array, low, (low+high)/2)maxRange(array, (low+high)/2, high)来尝试使用该方法,并尝试进行某种比较,但我不确定如何继续。

2 个答案:

答案 0 :(得分:2)

您需要做的是将数组分成两半,直到您只剩下一个元素。这是基本情况。

在每个递归步骤中,在下半部分调用maxRange,在上半部分调用maxRange。这些将返回这两个范围中的最大整数。现在,如果我们知道下半部分和上半部分中的最大整数,那么显然两半中的最大整数是两者中的较大者。有意义吗?

另一种解释:

在设计递归函数时,请尝试假装已经完成它并且函数按预期工作。所以,当你还在编写maxRange假装它已经做了你想要的东西时:给定一个数组,"low"整数(范围的起点,包括)和"high"整数(范围的结尾,不包括),它返回该范围内的最大整数。然后,我们只编写函数maxRange,将问题分成较小的部分,以便递归直到基本情况。当我们点击基础案例(low == high - 1)时,我们只返回array[low],因为只有一个元素。请记住,根据您定义函数的方式(如果high包含在内),基本情况可以是(low == high)(low == high - 1)。在纸上试试吧!请记住,整数运算只返回除法的整数部分:3/2是1.

答案 1 :(得分:-2)

您使用的是哪种语言?如果你使用c#,你可以做...

int [] arr = {1,2,3,4}; int max = arr.Max();