title: Add two numbers without using + or any arithmetic operators
body: <p>Here is the reference implementation I got, the confusion is, I think there is no need for recursion. I post both reference code and my thought below here, for the difference see line 5.<br />
  Any insights are appreciated. Please feel free to correct me if I am wrong.</p>
  <p>Reference implementation:</p>
  <blockquote>
  <pre><code>1 int add_no_arithm(int a, int b) {
  2   if (b == 0) return a;
  3   int sum = a ^ b; // add without carrying
  4   int carry = (a &amp; b) &lt;&lt; 1; // carry, but don’t add
  5   return add_no_arithm(sum, carry); // recurse
  6 }
  </code></pre>
  </blockquote>
  <p>Another implementation in my thought,</p>
  <pre><code>    1 int add_no_arithm(int a, int b) {
      2   if (b == 0) return a;
      3   int sum = a ^ b; // add without carrying
      4   int carry = (a &amp; b) &lt;&lt; 1; // carry, but don’t add
      5   return sum ^ carry;
      6 }
  </code></pre>
  <p>BTW, tried 8+8 in Python - worked for me:<br />
  Is the recursion needed?</p>
  <pre><code>a = 8
  b = 8
  sum = a ^ b
  carry = (a &amp; b) &lt;&lt; 1
  
  print(sum^carry)  # 16
  </code></pre>