class UnusualAdd {
public:
    int addAB(int A, int B) {
        // write code here
	  /*
	  以 A=3(011),B=5(101) 为例,递归过程如下:
	  第一次调用:C=3^5=6(110),D=(3&5)<<1=2(010) → 调用 addAB(6, 2)。
	  第二次调用:C=6^2=4(100),D=(6&2)<<1=4(100) → 调用 addAB(4, 4)。
	  第三次调用:C=4^4=0(000),D=(4&4)<<1=8(1000) → 调用 addAB(0, 8)。
	  第四次调用:触发边界条件(A=0),返回 0 | 8 = 8,递归结束。
	  */
        if(A == 0 || B == 0) return A | B;
        int C = A ^ B;
        int D = (A & B) << 1;
        return addAB(C, D);
    }
};