https://www.dailydishnews.org.uk/post/recursion-in-python-factorial-with-debugging-explained-it1lpk