2012-02-21 118 views
2

今天在Java的教授提出了這個例子,但我真的不能很好地理解如何通過這種方法來獲得結果= 4的過程。請問任何機構,請把一些儘可能清晰的線條如何解決此方法?謝謝 好,所以這是方法:遞歸解釋

public static int mystery(int[] values, int start, int value) 
{ 
    if(start == values.length) { 
     return value; 
    } 
    else 
     return Math.max(value, mystery(values, start+1, values[start])); 
} 
+3

什麼投入應該給結果'4'? – 2012-02-21 21:40:49

+0

你還應該包括輸入參數的值(分別是'values','start'和'value',否則很難解釋發生了什麼。雖然我猜測'value'和'start'都是0 – biziclop 2012-02-21 21:41:36

回答

8

結果不是4,但數組中的最大值。

它是這樣的:

values是元件陣列。

start是當前的索引。

value是當前最大值。

如果當前索引超過了數組的長度,則返回當前最大值。這是第一行代碼和停止條件。

否則,返回當前最大值和最大值之間的數組超過當前索引。這將遞歸地最終返回數組中的最大值。

您最初通過start = 0value = 0調用此函數。

假設values = [2,5,1]

mystery ([2,5,1], 0 , 0) -> 
    start (0) != values.length (3) -> 
    return max (0, mystery([2,5,1], 1, 2) -> 
     mystery ([2,5,1], 1, 2) -> 
     start (1) != values.length -> 
     return max (2, mystery([2,5,1], 2, 5) -> 
      mystery ([2,5,1], 2, 5) -> 
      start(2) != values.length -> 
       return max(5, mystery([2,5,1], 3, 2) -> 
        start(3) == values.length -> 
        return value (1) 
       -> return max(5,1) 
      -> return 5 
     -> return max(2,5) 
     -> return 5 
    -> return max(0,5) 
-> return 5 
+0

非常感謝您的描述。 – 2012-02-22 06:06:57

1

這裏是一個工作示例,可以玩:(它是在JavaScript,但功能相同的方式)

http://jsfiddle.net/rEZ66/1/

基本上,函數mystery取數組作爲輸入,並且儘管每個元素都會返回最大元素。

當它運行時,遞歸函數比較迄今(value)到陣列(values[start])的當前元素它已經發現的最高值,並且循環再次使用當前最大值,對下一個元素start+1

+0

謝謝您的幫助。 – 2012-02-22 06:06:52