原题链接

    题目描述:

    1. 不使用运算符 + -,计算两整数a b之和。
    2. 示例 1:
    3. 输入: a = 1, b = 2
    4. 输出: 3
    5. 示例 2:
    6. 输入: a = -2, b = 3
    7. 输出: 1
    8. 在真实的面试中遇到过

    解:
    **
    a ^ b 表示没有考虑进位的情况下两数的和,(a & b) << 1 就是进位。
    递归会终止的原因是 (a & b) << 1 最右边会多一个 0,那么继续递归,进位最右边的 0 会慢慢增多,最后进位会变为 0,递归终止。

    public int getSum(int a, int b) {
        return b == 0 ? a : getSum((a ^ b), (a & b) << 1);
    }