【问题标题】:recursive algorithm to find smallest element in array递归算法找到数组中的最小元素
【发布时间】:2012-03-16 11:02:00
【问题描述】:

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

这是算法。

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

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

提前感谢您的帮助。

【问题讨论】:

  • 每次递归都需要离递归结束更近一次。 (当你只有一个元素时)
  • 感谢您的回复。我将如何实现这个伪代码?不清楚我将如何处理代码中的那一行。

标签: java recursion pseudocode


【解决方案1】:

因为您的数组索引从 0 到 n-1,包括在内。您需要递归一个元素较小的子数组,因此是 n-2。

【讨论】:

    【解决方案2】:

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

    如果您使用的是数组。

    // 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);
    

    【讨论】:

      【解决方案3】:

      对于您的第一个问题:

      由于您使用的是递归算法,因此为了解决问题,您首先必须以较小的大小解决相同的问题。在这个伪代码中,为了找到长度为 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];
          }
      }
      
      }
      

      【讨论】:

      • 这是你询问的那一行 -> int temp=findMin(A, start, end-1 );
      猜你喜欢
      • 2013-03-28
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 2020-07-03
      相关资源
      最近更新 更多