Recursion and functions as first-class citizens
What we have seen so far in this chapter can be applied to any language that has function calls, even in languages that stick more firmly to the object-oriented domain. In this section, we’ll learn how to leverage some of the concepts of functional and multi-paradigm languages that make recursion easier to write and manage.
One of the most useful features I’ve found is to combine recursion with closures. To give an example of when this comes in handy, imagine working recursively on a data structure and having to keep some state tracked. Rather than tracking the state at the package level, or complicating the recursive function to keep the state tracked in the recursing functions, we can create an outer function that is not recursive and then use a recursive inner function. Let’s demonstrate this with an example to clear up some potential confusion.
Using the same tree as in the previous example, let’s...