计算NaturalNumber

时间:2016-03-18 13:23:52

标签: java recursion

我正在尝试编写一个方法(特别是使用递归),该方法将返回自然数中的偶数位数。我想使用返回类型的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,我在以错误的方式思考什么?

1 个答案:

答案 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