用于查找补集的Java递归方法

时间:2015-10-14 10:20:18

标签: 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){

}

1 个答案:

答案 0 :(得分: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;
}

然后:

System.out.println(complement(1234)); // prints 8765

这可以写得更短:

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