递归

一.定义

  在一个函数内部再调用函数本身。

二.递归深度

  每一次的调用,都会产生一个属于自己的空间,为了防止名称空间占用太多内存,于是python将递归层数控制在997(默认值),当然也可以修改,跟计算机的性能有关。

三.递归实例

  1.求一个整数n的阶乘

1 def factorial(n) :
2   if n == 1 :
3     return 1         #递归结束
4   return n * factorial(n - 1)  #问题规模减1,递归调用

  n = 5

  执行完后面return后面的再返回

四.注意:

  递归解决的问题:
  就是通过参数,来控制每一次缩小计算的规模


  适合的场景:
  数据的规模在减小,但是解决问题的思路没有变


  结束递归的的标志:return

五.二分查找算法 

 1 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]
 2 def func(l,aim):
 3     mid = (len(l)-1)//2
 4     if l:
 5         if aim > l[mid]:
 6             func(l[mid+1:],aim)
 7         elif aim < l[mid]:
 8             func(l[:mid],aim)
 9         elif aim == l[mid]:
10             print("bingo",mid)
11     else:
12         print('找不到')
13 func(l,66)
14 func(l,6)
15 
16 #升级版
17 def func(l, aim,start = 0,end = len(l)-1 ):
18     mid = (start+end)//2
19     if not l[start:end+1]:
20         return
21     elif aim > l[mid]:
22         return func(l,aim,mid+1,end)
23     elif aim < l[mid]:
24         return func(l,aim,start,mid-1)
25     elif aim == l[mid]:
26         print("bingo")
27         return mid
28 
29 index = func(l,68)
30 print(index)
原文地址:https://www.cnblogs.com/sxh-myblogs/p/7265160.html