python中递归函数写法_Python之递归函数
递归函数
1. 递归(recursion)一个函数在内部调用了自己,这种写法就叫做递归。
def func(): # 每次调用一个函数,就会开辟一块内存空间
print("djgdl")
func() # 在内部调用自己
print(123) # 这句话不会打印
func()
2. 关于递归函数
1. 递归函数必须有一个结束条件,递归并不是无限制的,在python中默认最大深度是997或998。
2. 分析的流程拿到返回值,到一个结束条件的时候叫做递,返回值计算的时候叫做归。一定有递推的过程,不一定有回归的过程。
3. 最大递归深度
import sys
sys.setrecursionlimit(100000000) # 修改递归最大深度,一般不要去修改
COUNT = 0
def func():
global COUNT
COUNT += 1
print(COUNT)
func()
func()
4. 二分查找(重点)
def search(num,l,start=None,end=None):
start = start if start else 0 # start是开始查找的位置
end = end if end else len(l)-1 # end是结束查找的位置
mid = (end - start) // 2 + start #//是取到整数
if start > end: # 这里是当要查找的值不存在的时候,就返回一个None
return None
elif l[mid] > num:
return search(num,l,start,mid-1)
elif l[mid] < num:
return search(num,l,mid+1,end)
elif l[mid] == num:
return mid,l[mid]
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]
print(search(66,l))
# 递推 :这个程序只有递推的过程,没有回归返回值的过程
def search(66,l,start=None,end=None):
# 一开始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]
start = start if start else 0
end = end if end else 25-1
mid = (24 - 0) // 2 + 0 =12
elif 41 < 66:
return search(66,l,12+1,24)
def search(66,l,start=13,end=24): #search(66,l,12+1,24)
# 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]
start = start if start else 0
end = end if end else len(l)-1
mid = (24 - 13) // 2 + 13 =18
elif 67 > 66:
return search(66,l,13,17)
def search(66,l,start=13,end=17): #search(66,l,13,17)
# 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]
start = start if start else 0
end = end if end else len(l)-1
mid = (17 - 13) // 2 + 13 = 15
elif 55 < 66:
return search(66,l,17,17)
def search(66,l,start=16,end=17): #search(66,l,16,17)
# 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]
start = start if start else 0
end = end if end else len(l)-1
mid = (17 - 17) // 2 + 17
elif 66 == 66:
return 17,66
示例一: 1 的年龄问题 ,1 的年龄不知道,比 2 大2岁,2 比 3 大2岁,3 比 4 大2岁,4 的年龄是40
def age(n):
if n == 4:
return 40
return age(n+1)+2
ret = age(1)
print(ret)
# 递的过程:
def age(1):
return age(1+1)+2
def age(2):
return age(2+1)+2
def age(3):
return age(3+1)+2
def age(4):
if n == 4:
return 40
# 归的过程,从下往上返回值
age(1) = 46
def age(1):
return age(2)+2
age(2) = 44
def age(2):
return age(3)+2
age(3) = 42
def age(3):
return age(4)+2
age(4) = 40
def age(4):
if n == 4:
return 40
示例二: 求阶乘 7*6*5*4*3*2*1
def func(n):
if n == 1:
return n
return n*func(n-1)
ret = func(7)
print(ret)
# 递推
def func(7):
return 7*func(7-1)
def func(6):
return 6*func(6-1)
def func(5):
return 5*func(5-1)
def func(4):
return 4*func(4-1)
def func(3):
return 3*func(3-1)
def func(2):
return 2*func(2-1)
def func(1):
if 1 == 1:
return 1
# 回归
func(7)=5040
def func(7):
return 7*func(7-1)
func(6)=720
def func(6):
return 6*func(6-1)
func(5)=120
def func(5):
return 5*func(5-1)
func(4)=24
def func(4):
return 4*func(4-1)
func(3)=6
def func(3):
return 3*func(3-1)
func(2)=2
def func(2):
return 2*func(1)
func(1)=1
def func(1):
if 1 == 1:
return 1
示例三:三级菜单
menu = {
'北京': {
'海淀': {
'五道口': {
'soho': {},
'网易': {},
'google': {}
},
'中关村': {
'爱奇艺': {},
'汽车之家': {},
'youku': {},
},
'上地': {
'百度': {},
},
},
'昌平': {
'沙河': {
'老男孩': {},
'北航': {},
},
'天通苑': {},
'回龙观': {},
},
'朝阳': {},
'东城': {},
},
'上海': {
'闵行': {
"人民广场": {
'炸鸡店': {}
}
},
'闸北': {
'火车战': {
'携程': {}
}
},
'浦东': {},
},
'山东': {},
}
def three_menu(menu):
while True:
for k in menu:print(k)
key = input(">>>")
if key.lower() =="q":return "q" # return 一个q 就需要有变量去接收
elif key == "b":break # 当输入b的时候,就break,这里break是只能返回上一层,是因为有while,如果单独return和break的效果是一样的,所以下面才需要有个变量去接受
elif key in menu:
ret = three_menu(menu[key]) # 这里的ret就是去接收return回来的 q 的
if ret == "q":return "q" # 当ret=q的时候,就直接再return q 这样就保证了用户输入q,就会直接退出
three_menu(menu)
python中递归函数写法_Python之递归函数相关推荐
- python中递归函数写法_python中递归函数如何创建
递归函数是编程技术之一,这意味着你的程序包含你自己调用的函数.与迭代函数一样,在多次执行类似处理时可以使用递归函数,但递归函数可以通过用简单的代码替换它们来处理更复杂的问题.本篇文章我们就来看看pyt ...
- python中fac函数_Python基础复习函数篇
目录 1.猴子补丁 2. global和nonlocal关键字 3.迭代器和生成器 4.递归函数 5.高阶函数和lamdba函数 6.闭包 7.装饰器 1. 猴子补丁 猴子补丁主要用于在不修改已有 ...
- middles在python中什么意思_Python 基础知识入门(2)
字符串格式化 Python字符串格式化有两种方式:百分号方式.format方式: 百分号的方式相对比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并在: 一.百分号方式 %[ ...
- python中function函数_Python基础---函数Function
函数Function 定义:带名字的代码块,用于完成具体的工作 最基本的一种代码抽象的方式,借助函数,可以不用关心底层的具体计算过程,直接在更高层次上思考问题 在Python中,内置了多种多样的函数, ...
- python中定义字符串_Python中的字符串String
Python中除了数字(Numbers)(int,float,complex)之外,另外一种重要的类型就是字符串. 字符串是字符序列,可以由任何字符构成. 在Python语言中,字符串可以放在单引号( ...
- python中基例_Python python从入门到实践(5) --代码复用
函数.类与代码复用 代码复用的思想 把代码当成资源进行抽象. 代码资源化:程序代码是一种用来表达计算的"资源" 代码抽象化:使用函数等方法对代码赋予更高级别的定义 代码复用:同一份 ...
- python中函数参数_Python函数的参数
本章将介绍函数中参数的用法,更多内容请参考:Python学习指南 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道传递正确的参数,以及函数就返回 ...
- python中定义数据结构_Python中的数据结构—简介
python中定义数据结构 You have multiples algorithms, the steps of which require fetching the smallest value ...
- python中怎么计算_python中的加减乘除运算
python中的加减乘除运算,是学习python入门的基础,是以后进行数学计算的关键部分.包括运算表达式的写法,运算规则,加减乘除,求余,求商等等. 工具/原料 python 电脑 方法/步骤 1 1 ...
最新文章
- php获取表字段,使用 php 获取表的字段信息
- namespace命名空间的理解C++
- 【Android工具】更新手机视频流媒体客户端播放器OPlayer
- Quartz- Quartz API以及Jobs 和Triggers介绍
- YC元老、硅谷天使投资第一人解读YC成功的秘密
- window使用技巧记录
- [crypto][ipsec] 简述ESP协议的sequence number机制
- 夹具PHP,PHP类的静态(static)方法和静态(static)变量
- java设计模式6.代理模式
- NYOJ-zb的生日(dfs)
- 【java学习之路】(数据结构篇)003.链表
- Fiddler代理配置
- sql中如何将视图中某一字段相同的数据合并 不同内容的字段相加_Tableau基础如何合并你的数据?理解与逻辑(上)...
- 如何区分abcd类地址_ip地址abc类怎么区分
- 阿里云轻量服务器使用
- linux_systemd启动方式解析,如何开机自动登录,开机自动运行程序
- 达梦数据库 防火墙设置
- 工作 10 年后,我突然决定读硕士了!
- Excel教程:数值为0不显示的三种解决方法介绍
- 报如下错误:android.util.AndroidRuntimeException: You cannot combine custom titles with other title featur
热门文章
- ​Redis的各种“坑”,你知道多少?
- 看看人家架构师那消息队列中间件玩的,那叫一个优雅!
- 万亿级流量高可用延时服务架构设计
- 高并发来袭,面向Google编程的程序员要小心了!
- Jeecg-Boot2.1.2 版本,手工集成Online在线开发模块(Online表单、Online报表)
- CSDN又力推一优秀开源项目jeecg,跨时代重构精华版发布
- SAP中的默认帐户与密码
- 二、Java面向对象(7)_封装思想——访问修饰符
- LVM逻辑卷管理命令
- vmware workstation 关于三种网络连接方式的理解