using blocks and lexical scope
tail recursion with gcd and factorial