官术网_书友最值得收藏!

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:

主站蜘蛛池模板: 洪湖市| 璧山县| 确山县| 马关县| 小金县| 浦江县| 华阴市| 西宁市| 怀柔区| 雅江县| 白城市| 聂拉木县| 巢湖市| 晴隆县| 连南| 五指山市| 正定县| 寿阳县| 安徽省| 平塘县| 偏关县| 诏安县| 定日县| 镇巴县| 凤山市| 教育| 延庆县| 萨嘎县| 昭苏县| 淳化县| 新竹市| 天气| 新巴尔虎左旗| 武鸣县| 那坡县| 光山县| 建始县| 洛宁县| 海阳市| 牡丹江市| 胶州市|