Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归解释_Java_Recursion - Fatal编程技术网

Java 递归解释

Java 递归解释,java,recursion,Java,Recursion,今天在Java的课堂上,教授提出了这个例子,但我真的不太理解如何通过这个方法得到结果=4的过程。请任何人尽可能清楚地写几行字,这个方法是如何解决的??非常感谢。 好的,这就是方法: public static int mystery(int[] values, int start, int value) { if(start == values.length) { return value; } else return Math.max(v

今天在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]));
}

结果不是4,而是数组中的最大值

事情是这样的:

是元素数组

start
是当前索引

是当前最大值

如果当前索引超过数组长度,则返回当前最大值。这是第一行代码和停止条件

否则,返回当前最大值和超过当前索引的数组最大值之间的最大值。这将递归地最终返回数组中的最大值

最初使用
start=0
value=0
调用此函数

假设
值=[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

下面是一个可以使用的工作示例:(它使用javascript,但功能相同)

基本上,函数
summary
将数组作为输入,通过每个元素循环返回最大元素


当它运行时,递归函数将它找到的最高值(
value
)与数组的当前元素(
values[start]
)进行比较,并使用当前最大值再次循环,针对下一个元素
start+1

什么输入应该给出结果
4
?您还应该包括输入参数的值(
开始
,否则很难解释发生了什么。尽管我冒险猜测
开始
都是0。