zoukankan      html  css  js  c++  java
  • 10-Python函数之递归

    Python函数之递归

    主要内容:递归知识、递归实例、总结三部分

    一.递归知识

    递归函数就是函数自己内部调用自己。注意两个知识点:

    1. 递归:定义函数时候,函数本身自己内部调用自己。
    2. 嵌套:定义函数时候,函数内部重新定义新函数。

     

        注意:1、超过最大递归限制的报错,只要写递归函数,必须要有结束条件

             2、返回值,不要只看到return就认为已经返回了。要看返回操作是在递归到第     几层的时候发生的,然后返回给了谁。如果不是返回给最外层函数,调用者就接收不到。需要再分析,看如何把结果返回回来。

    二.递归实例

    1. 二分法查找

        通过二分法查找列表中某一个数(二分法必须处理有序列表)

        思路:

        (1)、二分法原理:取数据中间值,中间值与目标值对比,若大于则往前继续二分查找,若小于则往后查找,直至找到所给的值,跟踩雷游戏一样(不知道踩雷游戏请忽略…咯咯),如从下列表中查找55的索引值,该如何实现?

    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] 

    1. def find(l,aim,start = 0,end = None):  #定义一个递归函数,  
    2.     end = len(l) if end is None else end  #此处end的意义?  
    3.     mid_index = (end - start)//2 + start  #寻找中间值  
    4.     if start <= end:                    #start小于end才寻找,否输出找不到  
    5.         if l[mid_index] < aim:     #  中间值小于目标值  
    6.             return find(l,aim,start =mid_index+1,end=end)  #此处return的实际意义?  
    7.         elif l[mid_index] > aim:    #  中间值大于目标值  
    8.             return find(l, aim, start=start, end=mid_index-1)   #此处return的意义?  
    9.         else:                                         #大于小于之后返回寻找值  
    10.             return "mid_index = %d"%mid_index  
    11.     else:  
    12.         return '找不到这个值,失败了'  
    13.     
    14. 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]  
    15. ret= find(l,66)  
    16. print(ret)  
    17.     
    18. #打印结果  
    19.     
    20. mid_index = 17  
    1. 斐波那契数列

        阶乘实现斐波那契数列1、1、2、3、5、8、13……

    1. #单递归,运算速度快  
    2. def fib(n,l = [1]):   # n =6  
    3.     l[0] +=1  
    4.     if n ==1 or n == 2:  
    5.         l[0] -= 1  
    6.         return 1,1  
    7.     else:  
    8.         a,b = fib(n-1)  
    9.         l[0] -= 1  
    10.         print(l[0])  
    11.         if l[0] == 1:  
    12.             return a+b  
    13.         return b,a+b  
    14. print(fib(50))  
    15.     
    16.     
    17. #双递归,递归效率低,运算复杂度大  
    18. def fib(n):  
    19.     if n==1 or n==2  
    20.         return 1  
    21.     else :  
    22.         return fib(n-1)+fib(n-2)  
    23.         
    24. print(fib(30))  

     

    1. 阶乘

        Python实现阶乘

    1. def fac(n):  
    2.     if n == 1 :  
    3.         return 1  
    4.     else:return n*fac(n-1)  
    5.     
    6.     
    7. print(fac(6))  

     

    自学课程参照老男孩全栈视频
  • 相关阅读:
    PHP的反射机制
    mysqlbinlog
    PHP调用java的class
    ecshop session机制
    memory_limit session.cache_expire ecshop初始化注释说明
    ecshop运行超过30秒超时的限制解决办法
    如果你想拥有事业,而非仅仅是工作
    扎克伯格谈”人际交往”趋势
    Magento架构分析,Magento MVC 设计分析
    推荐的PHP编码规范
  • 原文地址:https://www.cnblogs.com/chenrongjin/p/10027605.html
Copyright © 2011-2022 走看看