[英]Recursive explanation
今天在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,而是數組中的最大值。
它是這樣的:
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
這是一個可以使用的工作示例:(它是在javascript中,但功能相同)
基本上,函數mystery
將數組作為輸入,並循環每個元素返回最大元素。
當它運行時,遞歸函數將它到目前為止找到的最高值( value
)與數組的當前元素( values[start]
)進行比較,並使用當前最大值再次循環,對應下一個元素start+1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.