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

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:

主站蜘蛛池模板: 武夷山市| 佛坪县| 新源县| 开鲁县| 兴国县| 内黄县| 元江| 贡嘎县| 丰原市| 铜鼓县| 永德县| 龙州县| 紫金县| 秦皇岛市| 奉化市| 长治市| 高阳县| 石渠县| 大安市| 彭水| 元江| 历史| 略阳县| 金山区| 江孜县| 武川县| 察哈| 景谷| 鲁山县| 漳州市| 吉林省| 黄浦区| 高邑县| 辛集市| 南皮县| 巴楚县| 锡林郭勒盟| 连云港市| 建宁县| 蒲城县| 苏尼特左旗|