Java-建立一个递归,用偶数替换偶数

时间:2016-01-21 08:05:00

标签: java recursion

您好我需要构建一个用零替换偶数的递归: 例如 - 1254的数字是1050 数字332-将是330 数字24 - 将为0

我开始研究它,但一段时间后变得非常无能

 public static int replaceEvenDigitsWithZero(int number){
    if(number<1)
        return number;
    if(number%2==0 && number%10!=0){
        int temp=number%10;
        return(number/10+replaceEvenDigitsWithZero(number-temp));
    }
    return(replaceEvenDigitsWithZero(number/10));
}
public static void main(String[] args) {
        int num1 = 1254;
        System.out.println(num1 + " --> " + replaceEvenDigitsWithZero(num1));

        int num2 = 332;
        System.out.println(num2 + " --> " + replaceEvenDigitsWithZero(num2));

        int num3 = 24;
        System.out.println(num3 + " --> " + replaceEvenDigitsWithZero(num3));

        int num4 = 13;
        System.out.println(num4 + " --> " + replaceEvenDigitsWithZero(num4));
    }

}

5 个答案:

答案 0 :(得分:4)

由于您的方法仅查看最后一位数字,因此input / 10时应始终使用input >= 10调用自己。

然后取出递归返回的值,将其乘以10并将最后一位数字加回去,如果是奇数。

public static int replaceEvenDigitsWithZero(int number) {
    int result = 0;
    if (number >= 10)
        result = replaceEvenDigitsWithZero(number / 10) * 10;
    if (number % 2 != 0)
        result += number % 10;
    return result;
}

答案 1 :(得分:2)

如果您需要1-liner,请点击:;)

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

答案 2 :(得分:2)

嗯......设计一个递归算法总是有相同的步骤:

  1. 识别基本案例,即终止递归调用的场景。

  2. 问题缩小为更小(朝向基本情况)。

  3. 对于这个要求,可以通过除以10来轻松地解决问题。这也容易导致基本情况:单个数字是基本情况。因此,快速实施可以是:

    public static int replaceEvenDigitsWithZero(int number) {
        // I added handling of negative numbers ...
        if (number < 0) {
            return -replaceEvenDigitsWithZero(-number);
        }
    
        // base case
        if (number < 10) {
            return replaceOneDigit(number);
        }
    
        // recursion
        int lastDigit = number % 10;
        int remainder = number / 10;
        return replaceEvenDigitsWithZero(remainder) * 10 + replaceOneDigit(lastDigit);
    }
    
    public static int replaceOneDigit(int digit) {
        return (digit % 2 == 0) ? 0 : digit;
    }
    

    我添加了一个辅助方法,用于将偶数转换为零。

    现在的输出是:

      

    1254 - &gt; 1050

         

    332 - &gt; 330

         

    24 - &gt; 0

         

    13 - &gt; 13

答案 3 :(得分:0)

您需要跟踪您号码中的当前位置。 在当前函数中,您将只返回数字的第一个数字(因为每次调用递归时都将它除以10)。

public static int replaceEvenDigitsWithZero(int number, int position){

    // cancel condition:
    if(number < 10 * position) {
        return number;
    }

    // edit number:
    if (position > 0) {
        int currentNumber = number / (10 * position);    
    } else {
        currentNumber = number;
    }

    if(currentNumber%2==0){  //even?
        int multiplyValue = currentNumber % 10; // get rest of division by 10 (== digit in current position)
        number = number - (multiplyValue * (10 * position)); // set current position to zero
    }

    // recursive call:
    return replaceEvenDigitsWithZero(number,position+1);
}

没有测试我的代码,但我希望你知道如何做到这一点。 使用replaceEvenDigitsWithZero(num1,0)开始。

答案 4 :(得分:-2)

1转换为String

2 F(字符串):取第一个号码:将0,6,4,8,8个字符替换为0

3连接到F(剩下的字符串)

4转换为int