https://en.wikipedia.org/wiki/Recursion_(computer_science)