簡體   English   中英

如何使用遞歸方法找出數組中的奇數整數?

[英]How to find out the odd integers in an array using a recursive method?

我正在嘗試編寫一種方法來查找第一個位置和最后一個位置之間有多少個奇數。 該方法接受一個數組,然后接受兩個int的低位和高位。 該方法需要遞歸進行。 這是我到目前為止所擁有的。 這是方法調用和int數組。 我的輸出為1,但答案應該為2。

int array [] = {5, 2, 5, 6, 3, 1};
int n = countOddsInRange(array, 1, 4)

public static int countOddsInRange(int [] a, int first, int last)
{
    int count = 0;
    if(first <= last)
    {
        countOddsInRange(a, a[first + 1], a[last]);
        if(a[first] % 2 == 0)
        {
            count++;
        }
    }
    return count;   
}

您的代碼中有一些錯誤:

  1. 您在計算的是偶數,而不是奇數。 將條件更改為if(a[first] % 2 != 0)
  2. 遞歸調用應該獲取數組的索引,而不是這些位置的值。
  3. 您應該將遞歸調用的結果添加到總數中: count+=countOddsInRange(a, first + 1, last)

總結一下:

public static int countOddsInRange(int [] a, int first, int last)
{
    int count = 0;
    if(first <= last)
    {
        count+=countOddsInRange(a, first + 1, last);
        if(a[first] % 2 != 0)
        {
            count++;
        }
    }
    return count;   
}

您的函數應如下所示:

public static int countOddNumber(int [] a, int first, int last){
    return countOddNumber(a, first, last, 0);
}

public static int countOddNumber(int [] a, int first, int last, int count){
    //in recursive function start with termination test.
    if (first == last){
        return count + isOdd(a[first]);
    }
    else{
        return countOddNumber(a, first+1, last, count) + isOdd(a[first]);
    }
}

public static int isOdd(int number){
    if(number%2 == 0){return 1;}
    else{return 0}
}

您還應該添加一個測試來檢查first是否小於last以避免無限循環;)

PS:過濾器元素,其mod(element,2)= 0,然后獲取集合的大小。 該方法也使用功能樣式,並使用新的Java8功能。 而且可能要快得多。

public class CountOddsInRange {
  public static void main(String[] args) {
    int array[] = {5, 2, 5, 6, 3, 1};
    int n = countOddsInRange(array, 0, array.length - 1, 0);
    System.out.println("No of odds is " + n);
}

public static int countOddsInRange(int[] a, int first, int last, int count) {
  if (first <= last) {
    if (a[first] % 2 != 0) {
      count++;
    }
    return countOddsInRange(a, first + 1, last, count);
  }
  return count;
}

}

public class CountOddsInRange {
    public static void main(String[] args) {
        int array[] = {5, 2, 5, 6, 3, 1};
        int n = countOddsInRange(array, 0, array.length - 1);
        System.out.println("No of odds is " + n);
    }

    public static int countOddsInRange(int [] a, int first, int last)
    {
        int count = 0;
        if(first <= last)
        {
            count+=countOddsInRange(a, first + 1, last);
            if(a[first] % 2 != 0)
            {
                count++;
            }
        }
        return count;   
   }
}

暫無
暫無

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

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