2014-04-26 35 views
-5

我需要編寫的Java代碼以下問題有所幫助遞歸Java方法:編寫發現在int類型的數組中的最小值和最大值,而不使用任何環

寫遞歸Java方法它可以在不使用任何循環的情況下在int值數組中找到最小值和最大值。

所有幫助表示讚賞。

+0

使用循環編寫代碼很容易,問題在於遞歸。事情是,如何定義第一個元素而不使用循環。 –

+0

沒有循環?爲什麼,這很難 –

+0

是的,這是不幸的問題的主要觀點。 –

回答

2

這裏是你如何能想象這個問題最大:

您的數據能夠像

{a, b, c, d, e} 

你可以找到ma X使用這種方法

max(a, max(restOfElements)) 

這意味着你需要再次使用

max(a, max(b, max(restOfElements))) 
. 
. 
. 
max(a, max(b, max(c, max (d, max(e, nothing))))) 

可以那麼到底,甚至更好,因爲

max(a, .  .  .  .    ) 
     max(b, .  .  .    ) 
       max(c, .  .    ) 
        max (d, .   ) 
          max(e, nothing) 

可視化你有兩種情況,你的方法

  1. 當您處理e,所以你不能把它與任何
  2. 當你與最大值的後
  • 比較電流值要處理,你只需要返回e第一種情況,因爲沒有什麼比較否則與它進行比較。
  • 要處理第二種情況,只需從其餘元素中獲取最大值,並將其與當前值進行比較並返回更大的值。

鍛鍊,還可以實現略有不同的方法(可能用它來分鐘)

max(max(restOfElements),lastElement) 

,這將導致你

max(max(max(max(max(a,nothing),b),c),d),e) 
+0

實際上,我應該投下這個微不足道的答案給這個微不足道的作業問題:) –

+0

@RalfH我會downvote自己,如果會有代碼示例在我的答案(我試圖堅持規則「沒有代碼在作業問題,沒有代碼的答案)Bud我不相信給出一般解決方案的描述是非常糟糕的,OP將不得不以他/她自己的方式實現這個解決方案,這會留下許多決策,比如如何限制搜索範圍(如何通知方法什麼應該與什麼比較)和其他幾個。我試圖給OP一點點推動方向(S)他正在尋找。 – Pshemo

1

一種方法是定義一個返回整數數組的方法。第一個位置將包含最小值,第二個位置包含最大值。

您可以定義簽名的方法:

static int[] minAndMax(int[] arr, int[] minAndMax, int from)

你需要找到合適的終止條件。完成之後,下一步是比較您在陣列中掃描的當前值並檢查最小值和最大值。 之後,遞歸調用該方法來掃描數組中的下一個值。

這裏的初始化的例子:

public static void main(String[] args){ 
    int[] arr = {-1, -4, 2, 10, 2}; 
    System.out.println(Arrays.toString(minAndMax(arr, 
               new int[]{arr[0], arr[0]}, 
               1))); 
} 

,輸出: [-4, 10]

0

給你一個解決方案,試圖儘可能直觀地理解:

package test; 

import java.util.Arrays; 

public class Recursion { 

    public static void main(String[] args) { 

     int[] example = {0,3,-5,7,2,0,4,6,33,-56,2,4,8,3,6,6,6,78,3}; 
     System.out.println(getMin(example)); 
     System.out.println(getMax(example)); 

    } 

    static int getMin(int[] arrayOfInts){ 

     if(arrayOfInts == null || arrayOfInts.length == 0) 
      throw new IllegalArgumentException(); 

     if(arrayOfInts.length == 1) 
      return arrayOfInts[0]; 

     if(arrayOfInts.length == 2) 
      return Math.min(arrayOfInts[0], arrayOfInts[1]); 

     return Math.min(arrayOfInts[0], getMin(Arrays.copyOfRange(arrayOfInts, 1, arrayOfInts.length))); 

    } 

    static int getMax(int[] arrayOfInts){ 

     if(arrayOfInts == null || arrayOfInts.length == 0) 
      throw new IllegalArgumentException(); 

     if(arrayOfInts.length == 1) 
      return arrayOfInts[0]; 

     if(arrayOfInts.length == 2) 
      return Math.max(arrayOfInts[0], arrayOfInts[1]); 

     return Math.max(arrayOfInts[0], getMax(Arrays.copyOfRange(arrayOfInts, 1, arrayOfInts.length))); 

    } 

} 
相關問題