function & scope & recursion