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

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:

主站蜘蛛池模板: 手机| 东丽区| 西藏| 枣阳市| 凤庆县| 康马县| 凤冈县| 洱源县| 芒康县| 都安| 黔东| 蛟河市| 诸城市| 阿拉尔市| 通河县| 庆城县| 尤溪县| 喀喇沁旗| 丽江市| 缙云县| 穆棱市| 达孜县| 政和县| 唐海县| 信阳市| 安平县| 滦南县| 江都市| 德阳市| 镇雄县| 台北市| 鸡东县| 东莞市| 阿图什市| 龙泉市| 万安县| 桑植县| 贞丰县| 广南县| 乐陵市| 高碑店市|