巧妙地以递归方式查找数组中的最大元素

时间:2014-08-22 13:14:15

标签: c recursion

我知道递归并不是我在标题中描述的最佳方式,但这是一个练习。我想知道是否有任何方法可以在以下条件下递归地(在C中)找到数组中的最大值:

  • 不允许使用静态变量;
  • 如果第一个元素作为参数传递,那么在没有主块的编写器实际执行的情况下这样做会很酷(例如,编写器传递数组和数组的维度,但函数使用{{ 1}}作为第一个最大值)

感谢您的回答!

2 个答案:

答案 0 :(得分:3)

基本思想是认识到数组的最大值是第一个元素中的较大者,并且第一个元素被移除后的子阵列的最大值。

然后调用子数组上的max函数以获得该数组的最大值。 (我会让你编写剩下的代码。)

答案 1 :(得分:0)

接受回答后

对阵列的其余部分检查1个元素使用堆栈的N级。良好的递归避免了大量使用堆栈的算法。

相反,如果数组的长度为1,则返回该结果 否则,对阵列的每个 half 进行递归,并从2个半部分中选择最大值。

此方法使用order log2(N)堆栈空间。

两种算法最终都会调用递归函数N次,这只是堆栈有多深的问题。如果N = 1000,则迭代方法在堆栈上将具有大约1000个级别。采用分半法,约2 * log2(N)或20级。

Sample