2012-02-21 84 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