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

京公网安备 11010502036488号