gcd() now uses recursion