我是这里的新手,只想知道如何只返回偶数位。而且无需使用while或for。
public static long evenDigit(long digit){
return ((digit < 10 && digit % 2 == 0)
|| ((digit % 10) % 2 == 0)
?
: evenDigit(digit / 10));
}
我收到一个StackOverflowError。我认为这是因为?后面的线。它将无限递归。我真的不知道该怎么办。所以也许你们有一些提示?
编辑:好的,可以更改方法的名称。现在可能更清楚了。
所以这是去年考试中的一种方法。仅打印偶数位。使用递归。用这种风格。
答案 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);
}