- Python Data Structures and Algorithms
- Benjamin Baka
- 324字
- 2021-07-09 19:45:07
Recursion and backtracking
Recursion is particularly useful for divide and conquer problems; however, it can be difficult to understand exactly what is happening, since each recursive call is itself spinning off other recursive calls. At the core of a recursive function are two types of cases: base cases, which tell the recursion when to terminate, and recursive cases that call the function they are in. A simple problem that naturally lends itself to a recursive solution is calculating factorials. The recursive factorial algorithm defines two cases: the base case when n is zero, and the recursive case when n is greater than zero. A typical implementation is the following:
def factorial(n):
#test for a base case
if n==0:
return 1
# make a calculation and a recursive call
f= n*factorial(n-1)
print(f)
return(f)
factorial(4)
This code prints out the digits 1, 2, 4, 24. To calculate 4 requires four recursive calls plus the initial parent call. On each recursion, a copy of the methods variables is stored in memory. Once the method returns it is removed from memory. The following is a way we can visualize this process:

It may not necessarily be clear if recursion or iteration is a better solution to a particular problem; after all they both repeat a series of operations and both are very well suited to divide and conquer approaches to algorithm design. Iteration churns away until the problem is done. Recursion breaks the problem down into smaller and smaller chunks and then combines the results. Iteration is often easier for programmers, because control stays local to a loop, whereas recursion can more closely represent mathematical concepts such as factorials. Recursive calls are stored in memory, whereas iterations are not. This creates a trade off between processor cycles and memory usage, so choosing which one to use may depend on whether the task is processor or memory intensive. The following table outlines the key differences between recursion and iteration:

- Android Studio Essentials
- C++ Builder 6.0下OpenGL編程技術
- HTML5+CSS3網站設計教程
- 學Python也可以這么有趣
- Learning Unity 2D Game Development by Example
- 焊接機器人系統操作、編程與維護
- Python數據結構與算法(視頻教學版)
- PHP+Ajax+jQuery網站開發項目式教程
- 深入理解C指針
- Azure Serverless Computing Cookbook
- 自學Python:編程基礎、科學計算及數據分析(第2版)
- Building Business Websites with Squarespace 7(Second Edition)
- INSTANT JQuery Flot Visual Data Analysis
- 寫給青少年的人工智能(Python版·微課視頻版)
- Puppet 5 Beginner's Guide(Third Edition)