2010-12-23 101 views
0

我必須使用遞歸算法計算兩個整數的總和,但我真的不知道如何去做。這裏是條件:用Java遞歸整數整數

sum(x,y)=?
如果 X = 0 然後總和(X,Y)= Y 否則總和(X,Y)=總和(前身(x)中,後繼(Y))。

有人有一個想法,我怎麼可以在算法中寫這個?我會很樂意提供任何建議。

+2

你有那裏的算法 – Progman 2010-12-23 12:18:45

+2

爲什麼你在問你的時候回答你的問題? – 2010-12-23 12:19:24

+2

注意:這隻適用於x不是負數的情況。 – 2010-12-23 12:31:29

回答

7

我不會給你的代碼,因爲這似乎是一門功課,但這裏是粗略的算法:

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

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

這裏是我的我&Ĵ都> = 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)); 

    } 
1

這是最簡單的我能想象,相當於你的代碼在你的問題

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)); 
} 
1

Javaish僞代碼其中x是一個非負整數。

1

根據@ aioobe的回答處理負數。

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

注意:相當優化地使用〜以避免爆炸x = MIN_VALUE。 ;)