zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    团队的展示以及规划
    基于上次数独基础优化,并添加GUI界面
    利用程序随机构造N个已解答的数独棋盘
    本学期高级软件工程课程的实践项目的自我目标
    本学期高级软件工程课程的实践项目的自我目标
    案列分析
    编程作业
    构建之法
    软工一
    小黄衫获奖感言
  • 原文地址:https://www.cnblogs.com/zxc-Weblog/p/8243572.html
Copyright © 2011-2022 走看看