我正在学习java中的递归,但是我在查找数组中最小元素的索引时遇到了麻烦。所以我需要一些帮助..如果你对递归有一些很好的解释请发表评论
答案 0 :(得分:2)
我将提供一个递归的通用模板,而不是发布您的问题的答案。然后,您应该尝试并在有特定问题时回来。
通常,递归方法遵循以下形式:
private Result recursiveMethod(Context current) {
if (current.isInSimpleFormWithObviousAnswer()) {
return new Result(current.getValue());
} else {
Result result = new Result(current.getValue());
for (Context reducedContext: current.possibleReducedContexts()) {
result = result.possiblyCombine(recursiveMethod(reducedContext)));
}
return result;
}
}
这是一般形式。在许多情况下,您不需要Result
和Context
类,因为您将使用某种原始类型或集合。在许多情况下,递归调用不是迭代,因为只有一个可能的“简化上下文”。在你的情况下,这两种情况都是正确的。
答案 1 :(得分:0)
与数组上的大多数递归算法一样,您有:
让我们谈谈分而治之的方式: n / 2 。首先,我们将索引范围附加到数组。这些索引指定数组中我们开始和结束的位置。这比将数组(部分)有效地复制到另一个数组中更有效:
public static int minimum (int[] values) {
return minimum(values,0,values.length);
}
被调用的minimum
将是递归函数。
现在对于递归函数有两种情况:
或代码:
public static int minimum (int[] value, int frm, int to) {
if(to-frm <= 1) {//(1)
return value[frm];
} else { //(2)
int mid = (frm+to)/2;
int m1 = minimum(value,frm,mid);
int m2 = minimum(value,mid,to);
return Math.min(m1,m2);
}
}
TODO:现在您只需将其翻译为让返回最小元素的索引而不是元素本身。