
The process of solving large problems by breaking them down into smaller, more simple problems that have identical forms. Thinking Recursively: A small text to solve large problems. Concentrating on the practical value of recursion. this text, the first of its kind, is essential to computer science students’ education. In this text, students will learn the concept and programming applications of recursive thinking. This will ultimately prepare students for advanced topics in computer science such as compiler construction, formal language theory, and the mathematical foundations of computer science. Key Features: • Concentration on the practical value of recursion. • Eleven chapters emphasizing recursion as a unified concept. • Extensive discussion of the mathematical concepts which help the students to develop an appropriate conceptual model. • Large number of imaginative examples with solutions. • Large sets of exercises.
https://cs.stanford.edu/people/eroberts/books/ThinkingRecurs...
https://news.ycombinator.com/item?id=11934434
I also found this book helpful, when I was starting out with experience with imperative languages and thinking iteratively:
https://www.amazon.com/Thinking-Recursively-Java-Eric-Robert...
The story evoked a personal element, going back to when I was first learning programming in the 80's. Early on one of the serious hurdles I encountered was recursion. (Another was pointers and indirection.) After struggling to wrap my brain around the thing that kept calling itself, I ran across a book, "Thinking Recursively" by Eric S. Roberts, 1986, which was enormously helpful.
I consider the book a classic. And it must be since it's still in print! I'd highly recommend it for anyone who finds recursion unintuitive. Way back then it wasn't intuitive to me either, but with the book as a guide in time it became as natural as breathing air.
As a teen, I fumbled around for a while before discovering linux and open source and that good feeling you get when you download the src and start perusing and firing up your debugger. Having said that if you teach js, I'd highly recommend dojo, underscore, I guess most c /c++ might be too advanced but if not Webkit, Redis, and glib are clean fun code bases and dissecting Lisp / Emacs was a blast. As far as answering you actual question goes, I really liked Gödel, Escher, Bach back then, also thinking recursively by Roberts. The only "technical" book I enjoyed reading was Modern Operating Systems by Tanenbaum ( don't know what current editions are like, the roughly 2000-2001 version was great though). Its was simple, very clear, humorous, and a gives a great overview of how the os works.