递归函数
递归函数
递归的定义——在一个函数里再调用这个函数本身。
递归的最大深度是997,这是python从内存的角度出发给的安全限制,如果递归的次数太多,就不适合用递归来实现
递归的的缺点:占内存 递归的有点: 让代码变得简单
# n = 0 # def story(): # global n # n += 1 # print(n) # story() # story()
# alex 多大 n = 1 age(1) = age(2)+2 = age(n+1) + 2 # alex比egon大两岁 # egon多大? n = 2 age(2) = age(3) + 2 = age(n+1) +2 # egon比wusir大两岁 # wusir多大 n = 3 age(3) = age(4) + 2 = age(n+1) +2 # wusir比金老板大两岁 # 金老板多大? # 金老板40了 n = 4 age(4) = 40 def age(n): if n == 4: return 40 elif n >0 and n < 4: return age(n+1) + 2 print(age(1)) #1. def age(1): 14 #age(1) = age(2)+2 #age(1) = 44+2 # if 1 == 4: # return 40 # elif 1 >0 and 1 < 4: # 2. return age(1+1) + 2 13.#age(2)+2 # #3. def age(2): 12.#age(2) = age(3)+2 #age(2) = 42+2 # if 2 == 4: # return 40 # elif 2 >0 and 2 < 4: # 4. return age(2+1) + 2 11. #age(3)+2 # #5. def age(3): 10.#age(3) = age(4)+2 #age(3) = 40+2 # if 3 == 4: # return 40 # elif 3 >0 and 3 < 4: # 6. return age(3+1) + 2 9.#age(4)+2 =42 # #7. def age(4): #agw(4) = 40 # if 4 == 4: # 8. return 40 # elif 2 >0 and 2 < 4: # return age(2+1) + 2 print(age(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]
你观察这个列表,这是不是一个从小到大排序的有序列表呀?
如果这样,假如我要找的数比列表中间的数还大,是不是我直接在列表的后半边找就行了?
这就是二分查找算法!
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,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 '找不到这个值'
# 返回值
# 不要只看到return就认为已经返回了。要看返回操作是在递归到第几层的时候发生的,然后返回给了谁。
# 如果不是返回给最外层函数,调用者就接收不到。
# 需要再分析,看如何把结果返回回来。
# 斐波那契 # 问第n个斐波那契数是多少 # 1,1,2,3,5,8 #fib(6) = fib(5) + fib(4) # def fib(n): # if n == 1 or n==2: # return 1 # return fib(n-1) + fib(n-2) # print(fib(50)) # fib(6) = fib(5) + fib(4) # fib(5) = fib(4)+fib(3) # fib(4) = fib(3)+fib(2) # fib(3) = fib(2)+fib(1) # fib(2) = 1 # fib(1) = 1 # def fib(n,l = [0]): # l[0] +=1 # if n ==1 or n == 2: # l[0] -= 1 # return 1,1 # else: # a,b = (n-1) # l[0] -= 1 # if l[0] == 0: # return a+b # return b,a+b # print(fib(50)) def fib(n,a=1,b=1): if n==1 : return a return fib(n-1,b,a+b) print(fib(5)) # 阶乘 #3! 3*2*1 # 2! 2*1 # 1! 1 # def fac(n): # if n == 1 : # return 1 # return n * fac(n-1) # # print(fac(100))