【发布时间】:2014-09-30 22:35:57
【问题描述】:
如何编写一个函数来查找数组中的最大值以及该值在数组中出现的次数?
我们必须使用递归来解决这个问题。
到目前为止,我认为它应该是这样的:
int findMax(int[] a, int head, int last)
{
int max = 0;
if (head == last) {
return a[head];
}
else if (a[head] < a[last]) {
count ++;
return findMax(a, head + 1, last);
}
}
我不确定这是否会返回绝对最高值,而且我不确定如何更改我所拥有的
【问题讨论】:
-
你有什么想法?您将如何使用递归来处理有关数组的这些信息?
-
为了有效地使用递归,首先你需要建立一个基本案例,一旦整个问题得到解决,你就可以摆脱递归。其次,你必须找到能够让你从第一次调用递归函数到解决问题的规则。第三,通过递归调用函数来组合进度,直到达到第一步的基本情况。
-
把它分成两部分。首先编写一个找到最大值的递归函数。然后添加一种方法来跟踪它发生了多少次。
-
@user3112926 提供修改。 “建立一个基本案例,一旦整个问题得到解决,你就会摆脱递归”应该更像是“建立一个基本案例,一旦子问题得到简单解决,你就会摆脱递归 ”。仅当整个问题解决后才返回,需要 N 次深度递归调用。通过在解决子问题时返回,递归深度可以小得多。