递归算法,用于查找数组中的最小元素

时间:2012-02-26 21:03:02

标签: java recursion pseudocode

我有一些递归算法的伪代码,可以找到数组中最小的数字。

这是算法。

Min(A[0..n - 1])
If n = 1 return A[0]
else
{ 
  temp <-- Min(A[0..n - 2])
  if temp <= A[n - 1]
     return temp
  else return A[n - 1]
}

我不理解这个伪代码的一部分是“temp&lt; - Min(A [0..n - 2])”行。具体为什么在递归调用中它是“n - 2”而不是“n - 1”?

我的另一个问题是如何在代码中实现该行。我正在使用Java。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

因为数组的索引从0到n-1(包括0和n-1)。你需要递归一个较小的元素的子数组,因此n-2。

答案 1 :(得分:1)

第一个问题:

因为您正在使用递归算法,为了解决问题,您首先必须以较小的尺寸解决相同的问题。在这个伪代码中,为了找到长度为n的数组的最小值,首先找到大小为n-1的相同数组的最小值,然后将最小值与第n个元素进行比较。你的数组从0到n-1索引(这将使它的长度= n)所以对于递归调用,你必须从索引0到n-2(n-1个元素)调用数组。

第二个问题: 这就是我在Java中实现代码的方式:

public class Minimum {
   public Minimum(int[] A) {
    findMin(A, 0, A.length-1);
}

public int findMin(int [] A, int start, int end){
    if (start== end-1)
        return A[0];
    else{
        int temp=findMin(A, start, end-1 );
        if (temp<=A[end]) 
            return  temp;
        else 
            return A[end];
    }
}

}

答案 2 :(得分:0)

  

我的另一个问题是如何在代码中实现该行。

如果您使用的是数组。

// create an array with one less element.
A a2 = new A[a.length-1];
// copy the elements
System.arrayCopy(a,0,a2,0,a2.length);

如果您使用的是列表

List<A> a2 = a.subList(0, a.length-1);