位运算的按位与可以无进位的计算加法,但是还要有进位就可以使用按位异或,是计算进位的,不过要左移一位才是进位。
所以将二者相加,之道不存在进位即可
递归代码如下:
#include <iostream>
int sum (int a, int b) {
return b ? sum (a^b, (a&b) << 1) : a;
}
int main () {
int a, b;
std::cin >> a >> b;
std::cout << sum (a, b) << std::endl;
return 0;
}