递归方法计算数组中奇数的数量

时间:2015-11-06 20:49:18

标签: java recursion

我需要编写一个递归方法来计算数组中奇数整数的数量。

到目前为止,这是我的代码:

public static int countOdd(int[] numbers, int startIndex, int endIndex) {
    if (startIndex == endIndex) {
        if (numbers[startIndex] % 2 != 0) {
            return 1;
        } else {
            return 0;
        }
    } else {
        return countOdd(numbers, startIndex, endIndex - 1);
    }
}

2 个答案:

答案 0 :(得分:1)

您的递归行不正确:

return countOdd(numbers, startIndex, endIndex - 1);

你是否已经丢失了endIndex是否为奇数。这会有所帮助:

return countOdd(numbers, startIndex, endIndex - 1) + 
  countOdd(numbers, endIndex, endIndex); 

我不确定你是否正确地说它,我假设它会是:

countOdd(numbers, 0, numbers.length-1);

解释器:为了理解如何实现它,您需要解决问题。如果我想递归计算数组中的奇数:

[a, b, c, d, e, f, g, .... z]

上面的代码基本上是这样的:

countOdd([a, b, c, d, e, f, g, ...y]) + countOdd([z])

注意第二个操作数将返回0或1,因为子集的大小为1.第一个操作数基本上是长度1更小。递归继续:

countOdd([a, b, c, d.... x]) + countOdd([y]) + countOdd([z])
...
countOdd([a]) + countOdd([b]) + countOdd([c]) + ... countOdd([z])

一旦它们都是1号子集,它就可以计算出来。

 0 + 1 + 0 + 1 + 1 .. 

并从奇数位的个别计数求和中返回结果。

额外注释请注意,递归可以采用不同的方式,但仍然会得到相同的结果(例如:

return countOdd(numbers, startIndex, startIndex) + 
  countOdd(numbers, startIndex + 1, endIndex); 

答案 1 :(得分:0)

请你试试:

<your main class>{
   //global variables
   int index = 0;
   int[] array = {1,2,3,4,5};
   int counter = 0;
   int totalOfOddNumbers = countOddIntegers(index);

   System.out.println(totalOfOddNumbers);
}

private int countOddIntegers(int i){
   if (array[i] == 1) || (array[i]%2 != 0) counter ++;
   if (i != array.length - 1) return countOddIntegers(i+1);
   else return counter;
}