zoukankan      html  css  js  c++  java
  • python:递归函数

    1,初识递归函数

    1)什么是递归函数?
    在函数中自己调用自己叫做递归函数
    递归函数超过一定程度会报错。---RecursionError: maximum recursion dep th exceeded while calling a Python object。递归的错误,超过了递归函数的最大深度。
    2)最大递归深度:默认997
    3)递归函数的优缺点
    #如果递归次数太多,就不适合使用递归来解决问题。
    #递归的缺点:占内存
    # 递归的优点:会让代码变简单
    4)什么时候用递归?
    问题分析一级一级向下,答案一步一步向上返。
    2、初识算法------二分法
     
    #找到目标值aim,在l中的位置
    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] def find(l,aim): mid_index = len(l)//2 #找中间的索引 if l[mid_index] < aim: #如果中间索引所对应的值<目标值 new_l = l[mid_index+1 :] find(new_l,aim) elif l[mid_index] > aim: #如果中间索引所对应的值>目标值 new_l = l[:mid_index] find(new_l, aim) else: print('找到了',mid_index,l[mid_index]) find(l,66)
    #问题:如果目标值不在l里,则会报错,且没有返回值。因此需要进行改进

    改进:

    def find(l,aim,start = 0,end = None):
        end = len(l) if end is None else end
        mid_index = (end - start)//2 + start
        if start <= end:
            if l[mid_index] < aim:
                return find(l,aim,start =mid_index+1,end=end)
            elif l[mid_index] > aim:
                return find(l, aim, start=start, end=mid_index-1)
            else:
                return mid_index
        else:
            return '找不到这个值'
    
    
    ret= find(l,44)
    print(ret)

     3,超过最大递归限制的报错问题

    只要写递归函数,必须要有结束条件

    4,返回值问题

    不要只看到return就认为返回了。要看返回操作是在递归到第几层的时候发生的,然后返回给了谁。

    如果不是返回给最外层函数,调用者就接收不到。

    需要再分析,看如果把结果返回回来

    5,大部分的递归可以用循环来替代,递归一般与算法相结合。

    6,递归函数的效率问题

    递归函数一次执行调用自身一次会很快,如果一次执行调用了两次自身的话就会很慢。

     改进:

     问题:返回值是一个元祖,返回的是当前值和上一个值

  • 相关阅读:
    JS 中 console 的用法
    C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)
    C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo
    MEF框架使用总结
    webfunny前端监控开源项目
    我从Vue源码中学到的一些JS编程技巧
    nodejs 发送邮件demo
    从零开始手写Promise
    概率论要点
    行列式技巧
  • 原文地址:https://www.cnblogs.com/kakawith/p/8242632.html
Copyright © 2011-2022 走看看