我必须使用递归算法计算两个整数的总和,但真诚地我不知道如何这样做。以下是条件:
sum(x,y)=?
如果 x = 0 那么 sum(x,y)= y 否则 sum(x,y)= sum(前身(x),后继者(Y))。
有人知道如何在算法中写这个吗?任何建议我都会很高兴。
答案 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。 ;)