繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM