https://learn-software.com/programming/starting-concepts/recursive-functions/