Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java递归在数组中寻找最小数索引_Java_Arrays_Recursion - Fatal编程技术网

Java递归在数组中寻找最小数索引

Java递归在数组中寻找最小数索引,java,arrays,recursion,Java,Arrays,Recursion,我正在学习java中的递归,但在查找数组中最小元素的索引时遇到了困难。。所以我需要一些帮助。。如果您对递归有一些很好的解释,请留下评论。我将提供递归的通用模板,而不是对您的问题给出答案。然后你应该尝试一下,当你有一个具体的问题时再回来 通常,递归方法遵循以下形式: private Result recursiveMethod(Context current) { if (current.isInSimpleFormWithObviousAnswer()) { return

我正在学习java中的递归,但在查找数组中最小元素的索引时遇到了困难。。所以我需要一些帮助。。如果您对递归有一些很好的解释,请留下评论。

我将提供递归的通用模板,而不是对您的问题给出答案。然后你应该尝试一下,当你有一个具体的问题时再回来

通常,递归方法遵循以下形式:

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
类,因为您将使用一些基本类型或集合。还有许多情况下,递归调用不是迭代,因为只有一个可能的“简化上下文”。在您的情况下,这两种算法都是正确的。

与阵列上的大多数递归算法一样,您有:

  • 基本情况,其中(剩余)数组的长度为零;及
  • 一种迭代情况:长度为n的数组的问题部分通过求解长度为n-1或n/2的数组来解决;或者用另一种方式来细分它
让我们来谈谈分而治之的方法:n/2。首先,我们将为数组附加一个索引范围。这些索引指定我们在数组中开始和结束查找的位置。这比有效地将一个数组(部分)复制到另一个数组更有效:

public static int minimum (int[] values) {
    return minimum(values,0,values.length);
}
其中被调用的
最小值
将是递归函数

现在递归函数有两种情况:

  • 如果数组的长度为1,只需返回该元素(1);或
  • 如果阵列有更多元素,请将其细分为两个长度大致相等的子阵列,计算其最小值,并返回两(2)个子阵列中的最小值
或在代码中:

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);
    }
}
公共静态int最小值(int[]值、int-frm、int-to){

如果(要发布您尝试的代码片段,我们可以从那里帮助您。因此,人们需要显示“一些研究成果”…显示您尝试了什么,失败了什么,等等。也许
result=result.possibleCombine(…)
允许在
result
类:)中继承)@CommuSoft很好的建议。威尔补充道,我认为你可能刚刚完成了OP的家庭作业;-)@sprint:这个问题似乎建议返回索引,因此如果OP能够将其翻译成索引,我想他/她理解;)。