なんだろ
  return f(a, b, f(a, b, c - 1, d), d - 1);
のコードがそれと等価なら、a + b == 0 の時に 0 が返る理由がまずわからないOTL