我必須使用遞歸算法計算兩個整數的總和,但我真的不知道如何去做。這裏是條件:用Java遞歸整數整數
sum(x,y)=?
如果 X = 0 然後總和(X,Y)= Y 否則總和(X,Y)=總和(前身(x)中,後繼(Y))。
有人有一個想法,我怎麼可以在算法中寫這個?我會很樂意提供任何建議。
我必須使用遞歸算法計算兩個整數的總和,但我真的不知道如何去做。這裏是條件:用Java遞歸整數整數
sum(x,y)=?
如果 X = 0 然後總和(X,Y)= Y 否則總和(X,Y)=總和(前身(x)中,後繼(Y))。
有人有一個想法,我怎麼可以在算法中寫這個?我會很樂意提供任何建議。
我不會給你的代碼,因爲這似乎是一門功課,但這裏是粗略的算法:
predecessor(x) = x - 1
successor(x) = x + 1
sum(x, y) =
if x = 0
then y
otherwise sum(predecessor(x), successor(y))
這裏是我的我&Ĵ都> = 0組和解決方案= 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));
}
這是最簡單的我能想象,相當於你的代碼在你的問題
sum(x, y): return x == 0 ? y : sum(x-1, y+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));
}
Javaish僞代碼其中x是一個非負整數。
根據@ aioobe的回答處理負數。
sum(x, y): return x == 0 ? y : x < 0 ? ~sum(~x, -y) : sum(x-1, y+1)
注意:相當優化地使用〜以避免爆炸x = MIN_VALUE。 ;)
你有那裏的算法 – Progman 2010-12-23 12:18:45
爲什麼你在問你的時候回答你的問題? – 2010-12-23 12:19:24
注意:這隻適用於x不是負數的情況。 – 2010-12-23 12:31:29