递归Recursion
Posted larissa-0464
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归Recursion相关的知识,希望对你有一定的参考价值。
从开始自学写代码开始,就感觉递归是个特别美丽的算法。
“如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说更重要。”
编写递归函数时,必须告诉它何时停止递归。因此,每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。递归条件指的是函数调用自己,基线条件则指的是函数不再调用自己,从而避免形成无限循环。
编写涉及数组的递归函数时,基线条件通常是数组为空或只包含一个元素。陷入困境时,请检查基线条件是不是这样的。
例:计算一个数组的元素之和。
- 基于循环思想的算法中,依次读取下一个数组中的元素并计算其与前面的数组元素的和。Python代码如下:
>>> def sum_cycle(arr): total=0 for x in arr: total += x return total >>> arr = [1,3,5,7,9] >>> sum_cycle(arr) 25 >>>
- 基于递归思想的算法中,基线条件是数组中仅有一个元素时,那么数组元素的和就是这个元素的值。
Python代码如下:
>>> def sum(arr): if len(arr) == 1: ans = arr[0] else: ans = arr[0] + sum(arr[1:]) return ans >>> sum(arr) 25
在我浅浅的编程经验中,感觉递归方法还是经常使用的,比如对于treeview,遍历每个树节点的方法也是递归思想。关于递归的应用,在我另外一篇文章中有使用。
https://www.cnblogs.com/larissa-0464/p/10227483.html
以上是关于递归Recursion的主要内容,如果未能解决你的问题,请参考以下文章
python递归深度报错--RuntimeError: maximum recursion depth exceeded
Atitit 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).
详解Java递归(Recursion)通过递归解决迷宫回溯及八皇后问题