簡體   English   中英

使用遞歸查找數組中的最大元素

[英]Find the maximum elements in an array using recursion

我是一個算法初學者。我剛剛找到了一個解決方案,“遞歸地找到整數數組中的最大元素”:

public static int findMax(int[]arr)
{

  if(arr.length==1)
    return arr[0];

  return findMax(Arrays.copyOf(arr, arr.length-1))> arr[arr.length-1]?findMax(Arrays.copyOf(arr, arr.length-1)):arr[arr.length-1];
}

我做了幾次測試,似乎工作正常。

但是,我發現有人使用其他遞歸方法解決了它,就像在這篇文章中一樣:

使用遞歸java在數組中查找最大值

他的代碼如下:

 int largest(int[] a, int start, int largest) 
 {
   if (start == a.length)
     return largest;
   else {
    int l = (a[start] > largest ? a[start] : largest);
    return largest(a, start + 1, l);
}

對於這個特殊的問題,我的思維方式存在差異的本質。我的想法是這樣的:

1.我使用另一個參數“start”來跟蹤每次遞歸中當前光標到數組元素的情況,我沒有使用它,因為我在每次遞歸時將數組縮小了1並始終使用tail元素進行比較;

2.他使用另一個“最大”參數來跟蹤到目前為止發現的最大值。 我沒有在我的代碼中使用它,但我沒有使用它。 這實際上是我被卡住的地方。 我沒有使用那個“最大”變量來跟蹤每次迭代的最大值,為什么我可以達到相同的結果?

任何幫助是極大的贊賞!

首先,nm所說的是正確的,復制陣列既昂貴又不必要。 另一種算法使用start來避免這種情況。

但是對於你的問題。 你實際上使用最大的只是沒有命名任何東西!

return findMax(Arrays.copyOf(arr, arr.length-1))> arr[arr.length-1]?findMax(Arrays.copyOf(arr, arr.length-1)):arr[arr.length-1];

是你發現最大的地方。 它就像你提到的另一種算法。 首先,你找到最大的: findMax(Arrays.copyOf(arr, arr.length-1)) ,然后你將它的值與: arr[arr.length-1]選擇你當前最大的更大值。

另一個建議,為什么你需要findMax(Arrays.copyOf(arr, arr.length-1))調用findMax(Arrays.copyOf(arr, arr.length-1)) 只需使用變量來提高算法速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM