Explanation:

`a ^ b`

finds the sum without carry over`a & b`

finds the remain carry overs`(a & b) << 1`

moves the carry overs to the correct position- recursively sum results from
`1`

and`3`

until`2`

is zero.

```
var getSum = function(a, b) {
return ((a & b ) != 0) ? getSum(a ^ b, (a & b) << 1) : (a ^ b);
};
```