recursion more concise