add factorial recursion and reduce ways to do it