返回偶数

时间:2018-07-01 13:59:04

标签: java recursion

我是这里的新手,只想知道如何只返回偶数位。而且无需使用while或for。

public static long evenDigit(long digit){
    return ((digit < 10 && digit % 2 == 0) 
            || ((digit % 10) % 2 == 0)
            ? 
            : evenDigit(digit / 10));
}

我收到一个StackOverflowError。我认为这是因为?后面的线。它将无限递归。我真的不知道该怎么办。所以也许你们有一些提示?

编辑:好的,可以更改方法的名称。现在可能更清楚了。

所以这是去年考试中的一种方法。仅打印偶数位。使用递归。用这种风格。

1 个答案:

答案 0 :(得分:1)

来自comment

  

在主要方法中,我使用以下数字打印系统:123456
  而且我只希望246返回。

首先,您需要确定停止条件,以确保递归将终止。如果输入只有1位数字,则不应递归:

if (number < 10) { // only one digit
    if (number % 2 == 0)
        return number; // keep even digit
    return 0; // discard odd digit
}

现在,由于数字具有多个数字,因此我们需要确定是否要保留最后一位,然后对高阶数字进行递归调用:

if (number % 2 != 0)
    return odd(number / 10); // Discard last digit and process other digits

return odd(number / 10) * 10 // process other digits
     + number % 10;          // keeping last digit

以上可以缩写为:

public static long odd(long number) {
    return (number < 10 ? (number % 2 == 0 ? number : 0) :
            number % 2 != 0 ? odd(number / 10) : odd(number / 10) * 10 + number % 10);
}