这道题中可以使用按位异或,因为按位异或就是不进位加法,
进位我们可以使用两个数按位与,可以得出应该进位的数,使用 << 左移符号来进位
递归调用,知道 a 为零时返回 b ,b 为零时返回 a
举例:8 + 8 =
1000 + 1000 =
a 等于按位异或后为 0 b等于按位与之后为 1000,使用左移符号为 10000
此时 a 为 0 ,返回 b ,也就是 10000(16)
代码:
function sum(a, b) {
if (a === 0) {
return b;
}
if (b === 0) {
return a;
}
let newa = a ^ b; //异或
let newb = (a & b) << 1; //进位
return sum(newa, newb);
}
console.log(sum(1, 4));