我正在尝试编写一个方法(特别是使用递归),该方法将返回自然数中的偶数位数。我想使用返回类型的NaturalNumber这样做,以便更熟悉它。有人能指出我正确的方向吗?
//private static NaturalNumber countEvenDigits(NaturalNumber num)
//initalize a NaturalNumber--count--to zero
//while loop with condition that the num is not 0
//initialize a NaturalNumber--k--to num.divideBy10 so that it is equal to the last digit in the natural number
//if statement-- k mod 2 is equal to 0
//increment the NaturalNumber count
//end if statement
//call this function recursively
//end while statement
//return count
但是我当前的实现只返回0,我在以错误的方式思考什么?
答案 0 :(得分:0)
首先如果全部,你用Java发布了这个,所以我猜自然数是Integer(或int primitive)
如果满足函数调用“结束要求”(数字!= 0),那么你的函数需要在开头检查。
如果你的号码是!= 0,你实际上是检查它是偶数还是奇数。在此检查之后,您需要记住(count ++)并将递归方法调用的返回值添加到您的计数中,但删除了最后一位数,因为您已经在此调用中检查了该数字。 (count + = countEvenDigits(naturalNumber / 10))。只要有更多数字,这应该调用自己,最后,它将进入退出的初始if()。
/** http://stackoverflow.com/q/36085564/6077352 */
public class NaturalNumber {
public static void main(String[] args) {
int naturalNumber = 123456789;
System.out.println(countEvenDigits(naturalNumber));
}
private static int countEvenDigits(int naturalNumber) {
int count = 0;
if (naturalNumber != 0) {
if (naturalNumber % 2 == 0) {
count = count + 1;
}
count = count + countEvenDigits(naturalNumber / 10);
}
return count;
} }
示例输出:
4