首页 > 代码库 > 递归函数
递归函数
递归:就是在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归。简单递归例子:
def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? """ print(s) story() story()
查看递归的最大深度为997代码如下:
n=0 def f(): global n print(n) n+=1 f() f()
可以修改递归最大深度但是不建议修改,修改代码如下:
import sys sys.setrecursionlimit(10000000) n=0 def f(): global n print(n) n+=1 f() f()
递归函数需要需要返回值:也就是每一个都需要return
比如你问别人的年龄:他不直接告诉你,他会说我的年龄和别人年龄的关系
def age(n): if n==1: return 40 else: ret=age(n-1) return ret+2 r=age(5) print(r)
# def age(n): # if n==1: # return 40 # else: # ret=age(n-1) # return ret+2 # r=age(5) # print(r) # print(age(5))#48 # if n==1: # return 40 # else: # ret=age(4)#46 # return ret+2#48 # def age(4): # if n==1: # return 40 # else: # ret=age(3)#44 # return ret+2#46 # # def age(3): # if n==1: # return 40 # else: # ret=age(2)#42 # return ret+2#44 # def age(2): # if n==1: # return 40 # else: # ret=age(1)#40 # return ret+2#42 # def age(1): # if n==1: # return 40 # else: # ret=age(0) # return ret+2
这个代码是对上面递归的分解。
if和else里都有返回值,还有递归调用谁,就把返回值返回给谁。递归结束的方式是遇到return,还有函数遇到return就结束。
递归的应用:
查看数字是否在这个列表里
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=len(l)//2 if l[mid]>aim: new_l=l[:mid] return find(new_l,aim) elif l[mid]<aim: new_l=l[mid+1:] return find(new_l,aim) else: return l[mid] print(find(l,43))
一个数,直到不能被2整除为止:
def call(num): if num%2==0: num=num//2 return call(num) else: return num print(call(6))
通过二分法查找数字在列表里的索引:
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,end): mid=(start+end)//2 #print(mid) if l[mid]>aim: end=mid-1 return find(l,aim,start,end) elif l[mid]< aim: start=mid +1 return find(l,aim,start,end) else: return mid print(find(l,88,start=0,end=len(l)-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] def func(l, aim,start = 0,end = len(l)-1 ): mid = (start+end)//2 if aim not in l[start:end+1]: return elif aim > l[mid]: return func(l,aim,mid+1,end) elif aim < l[mid]: return func(l,aim,start,mid-1) elif aim == l[mid]: print("bingo") return mid index = func(l,100) print(index)
同一个问题的两个解决方法
总结:递归解决问是通过控制参数来控制每一次调用缩小计算的规模
适用场合:
数据规模在减少,但是解决问题的思路没有变
结束递归的标志:return
递归函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。