https://medium.com/@PythonicPioneer/an-introduction-to-recursion-in-data-structures-and-algorithms-4d10c436eff1