Java递归方法找到补充

opr*_*zer 2 java recursion

我正在考虑如何使用递归来查找数字的补码.例如,每个数字x一些必须成为9 - x,所以1234 -> 8765.

我真的不敢想如何做到这一点.到目前为止这是我的代码:

public static int complement(int n){
    int x = n % 10;
     x = x - 9;
     n = (n / 10) 
    return complement(n,x);
}

public static int complement(int n ,int times){

}
Run Code Online (Sandbox Code Playgroud)

Tun*_*aki 5

当你处理递归时,首先用英语(或你的母语:)编写算法很重要.

对于此任务,请考虑以下事项:

  • 我有一个号码n.我们取最后一位数字,然后将这个数字减去9.
  • 对其余数字再次执行此操作,即n / 10.得到的结果,我们需要再次输入一个数字:所以我们将结果乘以10并加上我们之前计算的数字.换句话说,complement(n / 10)返回数字的补码n而不是最后一位,所以我们需要将最后一位数的补码附加到此.
  • 当数字小于10时,我们无需再做任何事情,我们可以返回9 - n(这是基本情况,数字只有一位数).

在代码中,这实现为:

public static int complement(int n) {
    if (n < 10) {
        return 9 - n;
    }
    int x = n % 10;
    x = 9 - x;
    return 10 * complement(n / 10) + x;
}
Run Code Online (Sandbox Code Playgroud)

然后:

System.out.println(complement(1234)); // prints 8765
Run Code Online (Sandbox Code Playgroud)

这可以写得有点短:

public static int complement(int n) {
    if (n < 10) {
        return 9 - n;
    }
    return 10 * complement(n / 10) + 9 - n % 10;
}
Run Code Online (Sandbox Code Playgroud)