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