• 递归Recursion


    从开始自学写代码开始,就感觉递归是个特别美丽的算法。

    “如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说更重要。”

    编写递归函数时,必须告诉它何时停止递归。因此,每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。递归条件指的是函数调用自己,基线条件则指的是函数不再调用自己,从而避免形成无限循环。

     编写涉及数组的递归函数时,基线条件通常是数组为空或只包含一个元素。陷入困境时,请检查基线条件是不是这样的。

    例1:计算一个数组的元素之和。

    • 基于循环思想的算法中,依次读取下一个数组中的元素并计算其与前面的数组元素的和。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

     例2:欧几里得算法求最大公约数:

    1.m除以n,余数为r

    2.如果r=0,算法结束,n就是最大公因子

    3.令m=n,n=r,循环第一步

    Python代码:

    def GreatestCommonDivisor(m,n):
        if n==0:
            return m
        else:
            return GreatestCommonDivisor(n,m%r)

    在我浅浅的编程经验中,感觉递归方法还是经常使用的,比如对于treeview,遍历每个树节点的方法也是递归思想。关于递归的应用,在我另外一篇文章中有使用。

    https://www.cnblogs.com/larissa-0464/p/10227483.html

  • 相关阅读:
    npm包开发与发布
    mapbox展示动态图标
    axios并行请求
    Vue引入ES5的js库
    git常用操作
    单词倒排
    FT232RL芯片USB转TTL应用
    应用GL823芯片自制的读卡器
    队列图示
    队列
  • 原文地址:https://www.cnblogs.com/larissa-0464/p/10630300.html
Copyright © 2020-2023  润新知