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))  

 

猜你喜欢

转载自www.cnblogs.com/chenrongjin/p/10027605.html