今天在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]));
}
答案 0 :(得分:8)
结果不是4,而是数组中的最大值。
它是这样的:
values
是元素数组。
start
是当前索引。
value
是当前的最大值。
如果当前索引超过了数组的长度,则返回当前最大值。这是第一行代码和暂停条件。
否则,返回当前索引之前当前最大值和最大值之间的最大值。这将以递归方式最终返回数组中的最大值。
您最初使用start = 0
和value = 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
答案 1 :(得分:1)
以下是一个可以使用的工作示例:(它在javascript中,但功能相同)
基本上,函数mystery
将数组作为输入,并循环每个元素返回最大元素。
当它运行时,递归函数将它到目前为止找到的最高值(value
)与数组的当前元素(values[start]
)进行比较,并使用当前最大值再次循环,针对下一个元素start+1