簡體   English   中英

使用遞歸查找數組的最小值?

[英]Finding the minimum of an array using recursion?

好的,所以我一直在嘗試圍繞 Java 中的遞歸進行思考,我可以完成簡單的任務,例如求和、反轉等。但是我一直在努力做這個練習:

我正在嘗試使用遞歸找到數組中的最小數,但一直得到 0.0 的答案。

我對遞歸的理解是,我需要增加一個元素,然后提供一個基本情況來結束遞歸。 我想當我必須返回一個值以及什么時候最好調用遞歸方法時,我就搞砸了。

這是我到目前為止:

public static double findMin(double[] numbers, int startIndex, int endIndex) {

double min;
int currentIndex = startIndex++;

if (startIndex == endIndex)
    return numbers[startIndex];

else {
    min = numbers[startIndex];
    if (min > numbers[currentIndex]) {
        min = numbers[currentIndex];
        findMin(numbers, currentIndex, endIndex);
    }
            return min;
}       
} //findMin

提示:您findMin遞歸方式調用findMin ,但不使用其返回值。

(1)整個數組的最小值,(2)第一個元素,以及(3)除了第一個元素之外的所有元素的最小值之間的關系是什么?

這是一個簡化版本:

public static double min(double[] elements, int index) {

  if (index == elements.length - 1) {
    return elements[index];
  }

  double val = min(elements, index + 1);

  if (elements[index] < val)
    return elements[index];
  else
    return val;
}

這段代碼有很多問題,包括:

  • 您不使用遞歸findMin調用的結果。
  • 每次調用findMin startIndex都相同,因為currentIndexstartIndex增加之前被設置為startIndex的值。
  • 如果數組中索引 1 處的數字 <= 索引 0 處的數字,您只需返回該數字,甚至不進行遞歸調用。

除了第一個答案之外,還有一些觀察:

  • int currentIndex = startIndex++; - 你會在這里錯過你的第一個元素。 通常,您不想修改遞歸函數的輸入。 當您准備再次調用該函數時,處理輸入並生成新值 - 即“findMin(numbers, currentIndex+1, endIndex)”

暫無
暫無

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

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