https://medium.com/@chukwudi.ofoma/recursion-a-powerful-technique-for-solving-complex-programming-problems-ff18b423a166