递归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的主要内容,如果未能解决你的问题,请参考以下文章

C++基础教程——递归( recursion)

python递归深度报错--RuntimeError: maximum recursion depth exceeded

Atitit  循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).

详解Java递归(Recursion)通过递归解决迷宫回溯及八皇后问题

求问maximum recursion depth exceeded怎么解决

递归(recursion)方法