用Java递归整数整数

时间:2010-12-23 12:14:46

标签: java algorithm

我必须使用递归算法计算两个整数的总和,但真诚地我不知道如何这样做。以下是条件:

sum(x,y)=?
如果 x = 0 那么 sum(x,y)= y 否则 sum(x,y)= sum(前身(x),后继者(Y))。

有人知道如何在算法中写这个吗?任何建议我都会很高兴。

5 个答案:

答案 0 :(得分:7)

我不会给你代码,因为这似乎是一个功课,但这是粗略的算法:

predecessor(x) = x - 1
successor(x) = x + 1

sum(x, y) = 
  if x = 0 
    then y 
    otherwise sum(predecessor(x), successor(y))

答案 1 :(得分:1)

这是我对i&amp; j的解决方案&gt; = 0. set sum = 0;并减去1直到它<= 0

 public static int sum(int i, int j){
           return sum(i,j,0);
 }

 private static int sum(int i, int j, int sum) {
    if (i <= 0 && j <= 0) {
        return sum;
    } else if (i <= 0) {
        return sum(0, j - 1, sum + 1);
    } else if (j <= 0) {
        return sum(i - 1, 0, sum + 1);
    } else {
        return sum(i - 1, j - 1, sum + 2);
    }
}

    public static void main(String[] args) {
        System.out.println(sum(60, 7)); 

    }

答案 2 :(得分:1)

这是我能想象的最简单的

public static void main(String[] args) {
    System.out.println("4+5 = " + sum(4, 5));
    System.out.println("4+(-5) = " + sum(4, -5));
    System.out.println("-4+5 = " + sum(-4, 5));
    System.out.println("-4+5 = " + sum(-4, -5));
}

public static int sum(int x, int y) {
    if (x < 0) {
        x *= -1;
        y *= -1;
    }
    return (x == 0 ? y : sum(--x, ++y));
}

答案 3 :(得分:1)

与您的问题中的代码对应的Javaish伪代码

sum(x, y): return x == 0 ? y : sum(x-1, y+1)

适用于 x 为非负整数的任何数字对。

答案 4 :(得分:1)

根据@ aioobe的答案处理负数。

sum(x, y): return x == 0 ? y : x < 0 ? ~sum(~x, -y) : sum(x-1, y+1)

注意:相当乐观地使用〜来避免炸毁x = MIN_VALUE。 ;)