我正在做递归练习,我理解它的基础知识。但这一次练习让我陷入困境,我不知道它是如何得到它的输出的。这是:
public class MinIndex_rec
{
public static void main(String[] args)
{
int[] a = {1, -16, -3, 4, -5, -12, -17};
System.out.println("The Min value index is: " + MinIndex(a, a.length - 1));
}
public static int MinIndex(int[] x, int n)
{
if(n == 0)
return n;
int index = MinIndex(x, n-1);
if(x[index]<x[n])
{
System.out.println(x[index] + "\t" + x[n] + "\t" + index + "\t" + n);
return index;
}
else
return n;
}
}
输出结果为:
-16 -3 1 2
-16 4 1 3
-16 -5 1 4
-16 -12 1 5
The Min value Index is: 6
我对它如何得到输出一无所知。我将不胜感激任何帮助!
答案 0 :(得分:0)
该方法以递归方式查找数组中索引最低的项目。
该方法接受两个参数 - 要检查的数组及其最大索引。然后它递归地调用自己在该数组的子集上 - 基本上一个元素更短。它使用结果将返回位置的元素与最高位置的元素(递归调用评估中未包含的元素)进行比较。根据最高位置的元素是否更大,它返回最高位置作为最大元素的索引或从子集返回的原始索引。
示例中的前四行只返回临时结果,即原始数组子集的最大元素索引 - 第一个元素,前三个元素,前四个元素等。
仅当最高值未更改时才会打印此调试消息。所以在这个具体的例子中,除了第一次和最后一次比较之外,它总是打印1,因为它没有变化。
答案 1 :(得分:0)
它是这样的:
x = {1, -16, -3, 4, -5, -12, -17};
MinIndex(x, 6)
if(n == 0) => false
index = MinIndex(x, 5)
if(n == 0) => false
index = MinIndex(x, 4)
...
index = MinIndex(x, 0) // this is called when n is 1, x[n] = -16
if(n == 0) => true // True here so return 0
=> index = 0
if(x[0]<x[1]) => false // False here so return n again to the call
// when n was 2
=> index = 1
=> if(x[1]<x[2]) => TRUE
=> System.out.println(-16 + "\t" + -3 + "\t" + 1 + "\t" + 2);
...
etc.