先异或求sum,然后求carry,二者的和就是结果,可使还是不能用加号,递归执行,直到b==0。因为每次carry都移位右边多出一个零,然后下一次&的时候必然后面会是0,所以每递归调用一次b后面就多一个零,直到b==0.
public class Solution { public static int add(int a, int b) { if (b == 0) return a; int sum = a ^ b; int carry = (a & b) << 1; return add(sum, carry); } public static void main(String[] args) { System.out.println(add(1, 3)); System.out.println(add(1000, 5)); } }