[英]Finding the maximum integer in an array with recursion
我什至不知道从这个练习开始。 我已经看了两个小时了,不知道该怎么办。 有人告诉我写一个采用整数数组和一定范围的索引(低和高)的方法。
我得到的提示是,基本情况应在low == high
,最大返回范围内的值(应为array[low]
)。 然后,如果我们在数组范围内有多个元素,则可以将其拆分,在每个片段中找到最大值,然后找到最大值。 但是,我不知道如何进行。 我通过定义两个新数字maxRange maxRange(array, low, (low+high)/2)
和maxRange(array, (low+high)/2, high)
尝试使用该方法,并尝试进行某种比较,但我不确定如何继续。
您需要做的是将数组分成两半,直到只剩下一个元素。 这是基本情况。
在每一递归步骤中,调用maxRange
在下半部,并maxRange
上的上半部。 这些将返回这两个范围内的最大整数。 现在,如果我们知道下半部分和上半部分的最大整数,那么显然两半中的最大整数是两者中的较大者。 说得通?
另一种解释:
在设计递归函数时,请尝试假装您已经完成了递归并且该函数可以按预期工作。 因此,当您仍在编写maxRange
假装它已经maxRange
您的要求:给定一个数组,一个"low"
整数(范围的开始,包括端点)和一个"high"
整数(范围的结束,不是包含在内),则返回该范围内的最大整数。 然后,我们只需编写函数maxRange
将问题分成较小的部分,以便递归直到基本情况。 当我们遇到基本情况(low == high - 1)
,我们只返回array[low]
,因为只有一个元素。 请记住,根据定义函数的方式(如果包括high
),基本情况可以是(low == high)
或(low == high - 1)
。 在纸上尝试一下! 请记住,整数算术仅返回除法的整数部分:3/2为1。
您使用什么语言? 如果您正在使用c#,则可以...
int [] arr = {1,2,3,4}; int max = arr.Max();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.