• python基础十五之递归函数


      递归函数,在函数中调用自身函数,就会形成一个递归函数。例如:

    def recursion(n):
        n += 1
        print(n)
        recursion(n)

      由于递归函数的结构,在函数调用时,它会一直调用自身,而函数调用是会占用内存的,所以为了保护内存,python就限制了递归函数的递归深度,默认的限制深度为998。调用上面的函数函数它只能打印到998然后报错。

    def recursion(n):
        n += 1
        print(n)
        recursion(n)
    
    recursion(0)
    
    # RecursionError: maximum recursion depth exceeded while calling a Python object
    # 超出了递归的最大深度

       而这个限定是可以进行设定的,通过sys.setrecursionlimit()可以修改。

    import sys
    sys.setrecursionlimit(10000)

      由此可知,需要递归多次的处理的将不再适合使用递归。

      递归函数的优缺点:

        优点:在运用合理的情况下可以简化代码

        缺点:多次递归占用内存

      递归函数的应用:算法

      算法,人类在处理问题上,会发现和发明一些简单有效的计算方法,将这些思想应用于计算机后就产生了很多高效简单的计算方法。这个就是算法,它能使计算机拥有更高效的计算能力。

      计算机发展至今,已经出现了很多优秀的算法,通过学习和了解这些算法,我们将能写出更好更实用的新算法。这里就说下二分查找法!

      通过二分列表的索引,递归比较列表中间值和查找值的大小来快速的找到目标。二分法只能用于有序的对象!

    def dichotomy(lis, aim, start=0, end=None):
        end = len(lis) if end is None else end
        index = (end - start) // 2 + start
        if start < end:
            if lis[index] < aim:
                return dichotomy(lis, aim, start=index + 1, end=end)
            elif lis[index] > aim:
                return dichotomy(lis, aim, start=start, end=index - 1)
            else:
                return index
        else:
            return '找不到!'
    
    
    L = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42, 43, 55, 56, 66, 67, 69, 72, 76, 82, 83, 88]
    ret = dichotomy(L, 100)
    print(ret)
  • 相关阅读:
    ETL的两种架构(ETL架构和ELT架构)
    SQL 优化通用方法
    数据建模
    Python Pandas Merge, join and concatenate
    Python Pandas -- Panel
    win-msys2安装使用配置
    BeyondCompare4过期解决办法
    Git本地仓库推送到别的仓库
    IDEA调试可执行JAR包
    Oracle常见问题排查
  • 原文地址:https://www.cnblogs.com/zxc-Weblog/p/8243572.html
Copyright © 2020-2023  润新知