我甚至不知道从哪里开始练习。我一直在看它2个小时而不知道该怎么做。我被告知要编写一个采用整数数组和一系列索引(低和高)的方法。
我已经得到提示,基本情况应该是low == high
时,最大值返回范围内的值(应该是array[low]
)。然后,如果我们在数组的范围内有多个元素,我们可以将其拆分,找到每个片段中的最大值并找到最大值。但是,我不知道该怎么办。我尝试通过定义两个新数字maxRange(array, low, (low+high)/2)
和maxRange(array, (low+high)/2, high)
来尝试使用该方法,并尝试进行某种比较,但我不确定如何继续。
答案 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();