| Title Page | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-239 |
| Copyright | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-240 |
| Dedication | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-241 |
| About the Author | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-13 |
| Foreword | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-197 |
| Acknowledgments | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-207 |
| Introduction | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-211 |
| Who Is This Book For? | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-242 |
| About This Book | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-243 |
| Hands-On, Experimental Computer Science | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-244 |
| Installing Python | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-245 |
| Running IDLE and the Python Code Examples | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-246 |
| Running the JavaScript Code Examples in the Browser | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-247 |
| Part I: Understanding Recursion | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-215 |
| Chapter 1: What Is Recursion? | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-248 |
| The Definition of Recursion | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-249 |
| What Are Functions? | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-250 |
| What Are Stacks? | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-251 |
| What Is the Call Stack? | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-252 |
| What Are Recursive Functions and Stack Overflows? | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-253 |
| Base Cases and Recursive Cases | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-254 |
| Code Before and After the Recursive Call | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-255 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-256 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-257 |
| Practice Questions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-258 |
| Chapter 2: Recursion vs. Iteration | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-259 |
| Calculating Factorials | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-260 |
| The Iterative Factorial Algorithm | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-261 |
| The Recursive Factorial Algorithm | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-262 |
| Why the Recursive Factorial Algorithm Is Terrible | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-263 |
| Calculating the Fibonacci Sequence | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-264 |
| The Iterative Fibonacci Algorithm | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-265 |
| The Recursive Fibonacci Algorithm | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-266 |
| Why the Recursive Fibonacci Algorithm Is Terrible | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-267 |
| Converting a Recursive Algorithm into an Iterative Algorithm | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-268 |
| Converting an Iterative Algorithm into a Recursive Algorithm | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-269 |
| Case Study: Calculating Exponents | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-270 |
| Creating a Recursive Exponents Function | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-271 |
| Creating an Iterative Exponents Function Based on Recursive Insights | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-272 |
| When Do You Need to Use Recursion? | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-273 |
| Coming Up with Recursive Algorithms | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-274 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-275 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-276 |
| Practice Questions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-277 |
| Practice Projects | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-278 |
| Chapter 3: Classic Recursion Algorithms | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-279 |
| Summing Numbers in an Array | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-280 |
| Reversing a String | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-281 |
| Detecting Palindromes | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-282 |
| Solving the Tower of Hanoi | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-283 |
| Using Flood Fill | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-284 |
| Using the Ackermann Function | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-285 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-286 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-287 |
| Practice Questions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-288 |
| Practice Projects | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-289 |
| Chapter 4: Backtracking and Tree Traversal Algorithms | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-0 |
| Using Tree Traversal | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-290 |
| A Tree Data Structure in Python and JavaScript | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-291 |
| Traversing the Tree | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-292 |
| Preorder Tree Traversal | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-293 |
| Postorder Tree Traversal | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-294 |
| Inorder Tree Traversal | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-295 |
| Finding Eight-Letter Names in a Tree | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-296 |
| Getting the Maximum Tree Depth | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-297 |
| Solving Mazes | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-298 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-299 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-300 |
| Practice Questions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-301 |
| Practice Projects | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-302 |
| Chapter 5: Divide-and-Conquer Algorithms | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-14 |
| Binary Search: Finding a Book in an Alphabetized Bookshelf | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-303 |
| Quicksort: Splitting an Unsorted Pile of Books into Sorted Piles | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-304 |
| Merge Sort: Merging Small Piles of Playing Cards into Larger Sorted Piles | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-305 |
| Summing an Array of Integers | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-306 |
| Karatsuba Multiplication | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-307 |
| The Algebra Behind the Karatsuba Algorithm | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-308 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-309 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-310 |
| Practice Questions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-311 |
| Practice Projects | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-312 |
| Chapter 6: Permutations and Combinations | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-198 |
| The Terminology of Set Theory | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-313 |
| Finding All Permutations Without Repetition: A Wedding Seating Chart | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-314 |
| Getting Permutations with Nested Loops: A Less-Than-Ideal Approach | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-315 |
| Permutations with Repetition: A Password Cracker | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-316 |
| Getting K-Combinations with Recursion | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-317 |
| Get All Combinations of Balanced Parentheses | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-318 |
| Power Set: Finding All Subsets of a Set | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-319 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-320 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-321 |
| Practice Questions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-322 |
| Practice Projects | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-323 |
| Chapter 7: Memoization and Dynamic Programming | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-208 |
| Memoization | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-324 |
| Top-Down Dynamic Programming | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-325 |
| Memoization in Functional Programming | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-326 |
| Memoizing the Recursive Fibonacci Algorithm | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-327 |
| Python’s functools Module | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-328 |
| What Happens When You Memoize Impure Functions? | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-329 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-330 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-331 |
| Practice Questions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-332 |
| Chapter 8: Tail Call Optimization | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-212 |
| How Tail Recursion and Tail Call Optimization Work | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-333 |
| Accumulators in Tail Recursion | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-334 |
| Limitations of Tail Recursion | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-335 |
| Tail Recursion Case Studies | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-336 |
| Tail Recursive Reverse String | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-337 |
| Tail Recursive Find Substring | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-338 |
| Tail Recursive Exponents | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-339 |
| Tail Recursive Odd-Even | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-340 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-341 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-342 |
| Practice Questions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-343 |
| Chapter 9: Drawing Fractals | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-216 |
| Turtle Graphics | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-344 |
| Basic Turtle Functions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-345 |
| The Sierpiński Triangle | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-346 |
| The Sierpiński Carpet | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-347 |
| Fractal Trees | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-348 |
| How Long Is the Coast of Great Britain? The Koch Curve and Snowflake | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-349 |
| The Hilbert Curve | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-350 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-351 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-352 |
| Practice Questions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-353 |
| Practice Projects | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-354 |
| Part II: Projects | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-355 |
| Chapter 10: File Finder | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-356 |
| The Complete File-Search Program | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-357 |
| The Match Functions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-358 |
| Finding the Files with an Even Number of Bytes | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-359 |
| Finding the Filenames That Contain Every Vowel | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-360 |
| The Recursive walk() Function | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-361 |
| Calling the walk() Function | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-362 |
| Useful Python Standard Library Functions for Working with Files | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-363 |
| Finding Information About the File’s Name | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-364 |
| Finding Information About the File’s Timestamps | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-365 |
| Modifying Your Files | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-366 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-367 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-368 |
| Chapter 11: Maze Generator | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-369 |
| The Complete Maze-Generator Program | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-370 |
| Setting Up the Maze Generator’s Constants | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-371 |
| Creating the Maze Data Structure | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-372 |
| Printing the Maze Data Structure | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-373 |
| Using the Recursive Backtracker Algorithm | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-374 |
| Starting the Chain of Recursive Calls | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-375 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-376 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-377 |
| Chapter 12: Sliding-Tile Solver | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-378 |
| Solving 15-Puzzles Recursively | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-379 |
| The Complete Sliding-Tile Solver Program | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-380 |
| Setting Up the Program’s Constants | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-381 |
| Representing the Sliding-Tile Puzzle as Data | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-382 |
| Displaying the Board | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-383 |
| Creating a New Board Data Structure | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-384 |
| Finding the Coordinates of the Blank Space | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-385 |
| Making a Move | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-386 |
| Undoing a Move | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-387 |
| Setting Up a New Puzzle | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-388 |
| Recursively Solving the Sliding-Tile Puzzle | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-389 |
| The solve() Function | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-390 |
| The attemptMove() Function | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-391 |
| Starting the Solver | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-392 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-393 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-394 |
| Chapter 13: Fractal Art Maker | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-395 |
| The Built-in Fractals | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-396 |
| The Fractal Art Maker Algorithm | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-397 |
| The Complete Fractal Art Maker Program | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-398 |
| Setting Up Constants and the Turtle Configuration | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-399 |
| Working with the Shape-Drawing Functions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-400 |
| The drawFilledSquare() Function | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-401 |
| The drawTriangleOutline() Function | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-402 |
| Using the Fractal Drawing Function | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-403 |
| Setting Up the Function | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-404 |
| Using the Specifications Dictionary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-405 |
| Applying the Specifications | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-406 |
| Creating the Example Fractals | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-407 |
| Four Corners | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-408 |
| Spiral Squares | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-409 |
| Double Spiral Squares | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-410 |
| Triangle Spiral | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-411 |
| Conway’s Game of Life Glider | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-412 |
| Sierpiński Triangle | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-413 |
| Wave | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-414 |
| Horn | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-415 |
| Snowflake | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-416 |
| Producing a Single Square or Triangle | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-417 |
| Creating Your Own Fractals | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-418 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-419 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-420 |
| Chapter 14: Droste Maker | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-7 |
| Installing the Pillow Python Library | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-421 |
| Painting Your Image | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-422 |
| The Complete Droste Maker Program | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-423 |
| Setting Up | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-424 |
| Finding the Magenta Area | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-425 |
| Resizing the Base Image | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-426 |
| Recursively Placing the Image Within the Image | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-427 |
| Summary | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-428 |
| Further Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-429 |
| Index | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-21 |
| Table 2-1: Factorials of the First Few Integers | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-430 |
| Table 6-1: All Possible Permutations and Combinations, with and without Repetition, of the Set {A, B, C} | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-200 |
| Table 6-2: Calculating the Number of Possible Permutations and Combinations, with and without Repetition, of a Set of n Elements | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-201 |
| Table 6-3: How Power Sets Grow as New Elements (in Bold) Are Added to the Set | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-206 |
| Table 9-1: Turtle Functions in Python’s turtle Module and JavaScript’s jtg Library | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-219 |
| Table 9-2: Python-Only Turtle Functions | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-220 |
| Table 13-1: Keys in the Specification Dictionaries | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-431 |
| Figure 1-1: The Google search results for recursion link to the Google search results for recursion. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-432 |
| Figure 1-2: I’m So Meta, Even This Acronym (I.S. M.E.T.A.) (xkcd.com/917 by Randall Munroe) | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-433 |
| Figure 1-3: The recursive centaur. Image by Joseph Parker. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-434 |
| Figure 1-4: Sierpiński triangles are fractals (recursive shapes) that include Sierpiński triangles. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-435 |
| Figure 1-5: Your meandering conversation stack | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-436 |
| Figure 1-6: The stack starts empty. Cards are then pushed onto and popped off the stack. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-437 |
| Figure 1-7: The state of the call stack as the localVariables program runs | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-438 |
| Figure 1-8: A stack overflow happens when the call stack becomes too high, with too many frame objects taking up the computer’s memory. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-439 |
| Figure 1-9: The call stack keeping track of the values in the number local variable for each function call | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-440 |
| Figure 2-1: The state of the call stack as the recursive calls to factorial() are called and then return | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-441 |
| Figure 2-2: Each number of the Fibonacci sequence is the sum of the previous two numbers. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-442 |
| Figure 2-3: A tree diagram of the recursive function calls made starting with fibonacci(6). The redundant function calls are in gray. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-443 |
| Figure 2-4: The stack in opStack during the exponentWithPowerRule(6, 5) function call | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-444 |
| Figure 2-5: A maze (left) along with its interior paths (center) morphed to match a biological tree’s shape (right) | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-445 |
| Figure 2-6: A filesystem is similar to a tree structure. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-446 |
| Figure 3-1: The state of the call stack when sum([5, 2, 4, 8]) runs | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-447 |
| Figure 3-2: A [5, 2, 4, 8] array (right) is like a tree data structure (left) with only one branch at each node. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-448 |
| Figure 3-3: The state of the call stack as the rev() function reverses the CAT string | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-449 |
| Figure 3-4: A wooden Tower of Hanoi puzzle set | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-450 |
| Figure 3-5: The series of operations for solving a four-disk Tower of Hanoi | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-451 |
| Figure 3-6: The original shape in a graphics editor (top left) and the same shape with three different areas flood-filled with a light gray color | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-452 |
| Figure 4-1: A tree (left) and three examples of non-trees | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-1 |
| Figure 4-2: A tree with root A and leaves D, G, H, and F, along with its traversal orders | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-2 |
| Figure 4-3: A linked list data structure storing HELLO. Linked lists can be considered a kind of tree data structure. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-3 |
| Figure 4-4: The tree that stores names in our depthFirstSearch.py and depthFirstSearch.html programs | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-4 |
| Figure 4-5: The maze solved by our maze program in this chapter. Some intersections have lowercase letters that correspond to nodes in Figure 4-6. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-5 |
| Figure 4-6: In this DAG representation of the maze, nodes represent intersections, and edges represent the north, south, east, or west path from the intersection. Some nodes have lowercase letters to correspond to intersections in Figure 4-5. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-6 |
| Figure 5-1: A binary search repeatedly determines which half of a range contains your target item in a sorted array of items. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-15 |
| Figure 5-2: Quicksort works by repeatedly partitioning items into two sets. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-16 |
| Figure 5-3: The divide and merge phases of merge sort | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-17 |
| Figure 5-4: The merge step compares the two values at the start of the smaller sorted lists and moves them to the larger sorted list. Merging four cards requires only four steps. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-18 |
| Figure 5-5: A lookup table, such as this table of products of all single-digit numbers, saves our program from repeat calculations as the computer stores the precomputed values in memory for later retrieval. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-19 |
| Figure 5-6: The integers to multiply, x and y, are divided into halves a, b, c, and d. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-20 |
| Figure 6-1: The set {A, B, C} within the dashed lines and some of its subsets {A, B, C}, {A, C}, and { } within the solid lines. The circles represent sets, and the letters represent elements. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-199 |
| Figure 6-2: All six possible permutations of three wedding guests at a table | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-202 |
| Figure 6-3: A four-digit combination bicycle lock has 104, or 10,000, possible permutations with repetition (photo courtesy of Shaun Fisher, CC BY 2.0 license). | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-203 |
| Figure 6-4: Tree showing every possible k-combination (from 0 to 4) from the set {A, B, C, D} | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-204 |
| Figure 6-5: Tree showing every possible 2-combination from the set {A, B, C} | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-205 |
| Figure 7-1: A tree diagram of the recursive function calls made starting with fibonacci(6). The redundant function calls are in gray. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-209 |
| Figure 7-2: The number of function calls sharply increases for the original fibonacci() function (top) but grows only slowly for the memoized fibonacci() function (bottom). | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-210 |
| Figure 8-1: The process of transformations that factorial(5) makes to the integer 120 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-213 |
| Figure 8-2: The process of transformations that rev('abcdef') makes to the string fedcba | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-214 |
| Figure 9-1: The spiral drawn by the program using Python’s turtle module | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-217 |
| Figure 9-2: The headings in Python’s turtle module (left) and the JavaScript jtg library (right) | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-218 |
| Figure 9-3: An equilateral triangle (left) with an upside-down triangle added to form a Sierpiński triangle, with additional triangles recursively added | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-221 |
| Figure 9-4: The three inner triangles, with midpoints shown with large dots | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-222 |
| Figure 9-5: A standard Sierpiński triangle | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-223 |
| Figure 9-6: A skewed Sierpiński triangle | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-224 |
| Figure 9-7: The Sierpiński carpet | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-225 |
| Figure 9-8: Calling turtle.begin_fill(), drawing a path, and calling turtle.end_fill() creates a filled-in shape. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-226 |
| Figure 9-9: The Sierpiński carpet, with only the outlines of the rectangles drawn | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-227 |
| Figure 9-10: A 3D Menger sponge fractal | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-228 |
| Figure 9-11: A perfectly self-similar fractal tree generated with the left and right branches using consistent angles and lengths | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-453 |
| Figure 9-12: A more realistic tree created using random changes to branch angle and lengths | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-454 |
| Figure 9-13: The island of Great Britain, with a rough measure (left) and more precise measure (right). Measuring the coast more precisely adds 800 miles to its length. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-229 |
| Figure 9-14: After splitting the line segment into three equal parts (left), add a bump to the middle part (right). We now have four segments of length b / 3, to which bumps can be added again (bottom). | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-230 |
| Figure 9-15: Creating three Koch curves on the three sides of an equilateral triangle to form a Koch snowflake | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-231 |
| Figure 9-16: A Koch snowflake. Some of the interior lines remain because of small rounding errors. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-232 |
| Figure 9-17: The first three recursions of the Hilbert space-filling curve | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-233 |
| Figure 9-18: Five levels of the Hilbert curve, with line length 10 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-234 |
| Figure 9-19: Six levels of the Hilbert curve, filled in, with line length 5 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-235 |
| Figure 9-20: A box fractal, drawn to two levels | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-236 |
| Figure 9-21: The first three iterations of the Peano curve, from left to right. The bottom row includes the 3 × 3 sections that each part of the curve is split across. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-237 |
| Figure 10-1: An example filesystem and the recursive walk() function calls over it | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-455 |
| Figure 10-2: Going from the filename to the individual attributes of a timestamp | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-456 |
| Figure 11-1: The maze as it gets “carved out” by the recursive backtracking algorithm | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-457 |
| Figure 11-2: An example maze that can be represented by a data structure | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-458 |
| Figure 12-1: Solving a numeric sliding-tile puzzle from its scrambled state (left) to its solved, ordered state (right) | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-459 |
| Figure 12-2: The task of solving a 15-puzzle can be represented as a graph with tile states as nodes and slides as edges. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-460 |
| Figure 12-3: The 15-puzzle has undirected edges (drawn without an arrowhead) between its nodes because slides can be undone by performing the opposite slide. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-461 |
| Figure 12-4: An example of a loop in the 15-puzzle’s graph | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-462 |
| Figure 12-5: The x, y coordinates for each space on the board (left) and the corresponding data structure index (right) | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-463 |
| Figure 12-6: If the blank space is in the bottom-right corner, down and right are the only valid slide directions. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-464 |
| Figure 13-1: The nine example fractals that come with the Fractal Art Maker program | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-465 |
| Figure 13-2: The results of calling drawFilledSquare() (left) and drawTriangleOutline() (right) on their own | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-466 |
| Figure 13-3: The triangle produced by the first call to drawFractal() (left) and the first set of three recursive calls (right) | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-467 |
| Figure 13-4: The first level of recursive calls to drawFractal() (left) and the nine new triangles of the second level of recursive calls (right) | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-468 |
| Figure 13-5: The final Wave fractal after each triangle recursively generates three more triangles | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-469 |
| Figure 13-6: The measurements of an equilateral triangle with sides the length of size | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-470 |
| Figure 13-7: Drawing an equilateral triangle involves three forward movements and three 120-degree turns. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-471 |
| Figure 13-8: Each step of the Four Corners example from left to right, top to bottom. Each square recursively produces four more squares at its corners, with colors alternating between white and gray. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-472 |
| Figure 13-9: The Four Corners fractal with the first dictionary removed from the specs list | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-473 |
| Figure 13-10: In each of these four images, the turtle always moves 100 units “right” and “up” along the relative x-axis and y-axis of its initial heading. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-474 |
| Figure 13-11: The nine fractals that come with Fractal Art Maker, with the shape-drawing functions swapped | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-475 |
| Figure 14-1: The recursive illustration on a tin of Droste’s Cacao | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-8 |
| Figure 14-2: Recursive applications of the image to the magenta pixels. If you are viewing the black-and-white image printed in this book, the magenta area is the rectangle in front of the museum visitor. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-9 |
| Figure 14-3: The base image with a magenta area outlined in white (left) and the recursive image it produces (right) | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-10 |
| Figure 14-4: The base image with the magenta area in the monitor (top), the resized image over the base image (middle), and the final recursive image that replaces only the magenta pixels (bottom) | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-11 |
| Figure 14-5: Resizing the image to the dimensions of the magenta area can result in a different aspect ratio, causing it to look stretched or squished. | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-12 |
| Front Matter | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-239 |
| Dedication | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-241 |
| Foreword | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-197 |
| Introduction | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-211 |
| Part I: UNDERSTANDING RECURSION | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-215 |
| Chapter 1: What Is Recursion? | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-248 |
| Start Reading | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-248 |
| Chapter 2: Recursion vs. Iteration | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-259 |
| Chapter 3: Classic Recursion Algorithms | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-279 |
| Chapter 4: Backtracking and Tree Traversal Algorithms | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-0 |
| Chapter 5: Divide-and-Conquer Algorithms | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-14 |
| Chapter 6: Permutations and Combinations | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-198 |
| Chapter 7: Memoization and Dynamic Programming | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-208 |
| Chapter 8: Tail Call Optimization | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-212 |
| Chapter 9: Drawing Fractals | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-216 |
| Part II: Projects | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-355 |
| Chapter 10: File Finder | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-356 |
| Chapter 11: Maze Generator | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-369 |
| Chapter 12: Sliding-Tile Solver | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-378 |
| Chapter 13: Fractal Art Maker | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-395 |
| Chapter 14: Droste Maker | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-7 |
| Index | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-21 |
| iii | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-476 |
| iv | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-477 |
| v | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-478 |
| vi | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-479 |
| xv | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-480 |
| xvi | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-481 |
| xvii | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-482 |
| xix | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-483 |
| xx | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-112 |
| xxi | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-484 |
| xxii | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-485 |
| xxiii | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-486 |
| xxiv | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-487 |
| 1 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-488 |
| 3 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-489 |
| 4 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-133 |
| 5 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-113 |
| 6 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-36 |
| 7 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-118 |
| 8 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-35 |
| 9 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-56 |
| 10 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-149 |
| 11 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-490 |
| 12 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-54 |
| 13 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-152 |
| 14 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-45 |
| 15 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-491 |
| 16 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-69 |
| 17 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-150 |
| 18 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-136 |
| 19 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-492 |
| 21 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-137 |
| 22 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-92 |
| 23 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-93 |
| 24 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-94 |
| 25 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-100 |
| 26 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-97 |
| 27 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-99 |
| 28 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-102 |
| 29 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-101 |
| 30 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-95 |
| 31 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-68 |
| 32 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-128 |
| 33 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-108 |
| 34 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-87 |
| 35 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-91 |
| 36 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-88 |
| 37 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-90 |
| 38 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-194 |
| 39 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-191 |
| 40 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-38 |
| 41 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-46 |
| 42 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-66 |
| 43 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-493 |
| 45 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-494 |
| 46 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-122 |
| 47 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-176 |
| 48 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-39 |
| 49 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-123 |
| 50 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-147 |
| 51 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-181 |
| 52 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-124 |
| 53 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-169 |
| 54 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-25 |
| 55 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-196 |
| 56 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-184 |
| 57 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-183 |
| 58 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-495 |
| 59 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-496 |
| 60 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-109 |
| 61 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-111 |
| 62 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-110 |
| 63 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-497 |
| 64 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-498 |
| 65 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-29 |
| 66 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-30 |
| 67 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-31 |
| 68 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-121 |
| 69 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-499 |
| 71 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-500 |
| 72 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-34 |
| 73 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-73 |
| 74 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-32 |
| 75 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-179 |
| 76 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-61 |
| 77 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-52 |
| 78 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-75 |
| 79 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-77 |
| 80 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-76 |
| 81 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-74 |
| 82 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-119 |
| 83 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-155 |
| 84 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-501 |
| 85 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-157 |
| 86 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-502 |
| 87 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-156 |
| 88 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-503 |
| 89 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-504 |
| 90 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-134 |
| 91 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-67 |
| 92 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-505 |
| 93 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-60 |
| 94 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-50 |
| 95 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-51 |
| 96 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-506 |
| 97 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-49 |
| 98 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-186 |
| 99 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-185 |
| 100 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-507 |
| 101 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-508 |
| 102 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-509 |
| 103 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-510 |
| 104 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-159 |
| 105 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-511 |
| 106 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-512 |
| 107 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-161 |
| 108 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-160 |
| 109 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-513 |
| 110 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-514 |
| 111 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-170 |
| 112 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-515 |
| 113 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-138 |
| 114 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-140 |
| 115 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-516 |
| 116 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-139 |
| 117 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-517 |
| 118 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-518 |
| 119 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-33 |
| 120 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-48 |
| 121 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-519 |
| 122 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-520 |
| 123 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-171 |
| 124 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-85 |
| 125 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-63 |
| 126 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-125 |
| 127 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-173 |
| 128 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-172 |
| 129 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-521 |
| 130 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-164 |
| 131 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-163 |
| 132 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-175 |
| 133 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-174 |
| 134 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-141 |
| 135 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-522 |
| 136 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-126 |
| 137 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-64 |
| 138 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-523 |
| 139 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-43 |
| 140 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-82 |
| 141 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-44 |
| 142 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-524 |
| 143 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-177 |
| 144 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-525 |
| 145 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-178 |
| 146 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-526 |
| 147 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-148 |
| 148 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-142 |
| 149 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-527 |
| 151 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-528 |
| 152 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-83 |
| 153 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-53 |
| 154 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-98 |
| 155 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-104 |
| 156 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-103 |
| 157 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-529 |
| 158 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-105 |
| 159 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-79 |
| 160 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-530 |
| 161 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-70 |
| 163 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-65 |
| 164 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-96 |
| 165 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-27 |
| 166 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-71 |
| 167 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-57 |
| 168 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-28 |
| 169 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-89 |
| 170 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-26 |
| 171 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-531 |
| 172 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-189 |
| 173 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-127 |
| 175 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-114 |
| 176 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-151 |
| 177 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-58 |
| 178 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-42 |
| 179 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-86 |
| 180 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-47 |
| 181 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-532 |
| 182 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-533 |
| 183 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-193 |
| 184 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-182 |
| 185 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-534 |
| 186 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-158 |
| 187 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-117 |
| 188 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-116 |
| 189 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-190 |
| 190 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-62 |
| 191 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-143 |
| 192 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-145 |
| 193 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-144 |
| 194 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-129 |
| 195 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-535 |
| 196 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-130 |
| 197 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-24 |
| 198 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-536 |
| 199 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-537 |
| 201 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-538 |
| 203 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-107 |
| 204 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-106 |
| 205 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-539 |
| 206 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-165 |
| 207 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-540 |
| 208 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-167 |
| 209 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-72 |
| 210 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-166 |
| 211 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-195 |
| 212 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-168 |
| 213 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-192 |
| 214 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-541 |
| 215 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-154 |
| 216 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-146 |
| 217 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-542 |
| 218 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-153 |
| 219 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-543 |
| 220 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-40 |
| 221 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-188 |
| 222 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-59 |
| 223 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-544 |
| 224 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-545 |
| 225 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-135 |
| 226 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-546 |
| 227 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-547 |
| 228 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-548 |
| 229 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-549 |
| 231 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-22 |
| 232 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-78 |
| 233 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-84 |
| 234 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-550 |
| 235 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-551 |
| 236 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-552 |
| 237 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-553 |
| 238 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-554 |
| 239 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-555 |
| 240 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-556 |
| 241 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-557 |
| 242 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-558 |
| 243 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-187 |
| 244 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-559 |
| 245 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-560 |
| 246 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-561 |
| 247 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-562 |
| 248 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-563 |
| 249 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-564 |
| 250 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-565 |
| 251 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-566 |
| 252 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-567 |
| 253 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-568 |
| 254 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-569 |
| 255 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-570 |
| 256 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-571 |
| 257 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-572 |
| 259 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-573 |
| 260 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-115 |
| 261 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-574 |
| 262 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-575 |
| 263 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-576 |
| 264 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-577 |
| 265 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-578 |
| 266 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-579 |
| 267 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-580 |
| 268 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-581 |
| 269 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-582 |
| 270 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-583 |
| 271 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-584 |
| 272 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-585 |
| 273 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-586 |
| 274 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-587 |
| 275 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-588 |
| 276 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-589 |
| 277 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-590 |
| 278 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-591 |
| 279 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-592 |
| 280 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-593 |
| 281 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-594 |
| 282 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-595 |
| 283 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-80 |
| 284 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-120 |
| 285 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-55 |
| 286 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-180 |
| 287 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-81 |
| 288 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-132 |
| 289 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-23 |
| 290 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-162 |
| 291 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-596 |
| 292 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-37 |
| 293 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-597 |
| 294 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-131 |
| 295 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-41 |
| 296 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-598 |
| 297 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-599 |
| 298 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-600 |
| 299 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-601 |
| 300 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-602 |
| 301 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-603 |
| 302 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-604 |
| 303 | https://inventwithpython.com/recursion/frontmatter.html#calibre_link-605 |
| http://creativecommons.org/licenses/by-nc-sa/3.0/us | http://creativecommons.org/licenses/by-nc-sa/3.0/us |
| [email protected] | https://inventwithpython.com/cdn-cgi/l/email-protection |
| https://www.inventwithpython.com | https://www.inventwithpython.com |
| https://www.dabeaz.com | https://www.dabeaz.com |