python之函数递归
函数递归调用
在函数内部,可以调用其它函数,如果一个函数在内部调用自身,即是递归调用
为防止无限递归类似于死循环,需要如下:
1、必须要有一个明确的返回值;
2、每次进入更深一层递归时,问题规模应该比上次递归都有所减少;
3、递归效率不高,当层次过多会导致栈溢出
例如:
def calc(n):
print(n)
if int(n/2) == 0:
return n res=calc(int(n/2))
return res v=calc(10)
print(v)
返回结果:
10
5
2
1
1
程序执行过程:

调用calc()函数,传入参数10;calc()函数第一次执行;
进入calc函数,打印10
判断不满足
再次调用calc函数传入参数5,calc()函数第二次执行;
此时第一次calc函数在等待第二次calc函数的返回结果赋值给res
第二次calc函数执行:
打印5
判断不满足
执行第三次calc函数,传入参数2,calc()函数第三次执行;
此时第二次calc函数在等待第三次calc函数的返回结果赋值给res
第三次calc函数执行:
打印2
判断不满足
执行第四次calc函数,传参数1,calc()函数第四次执行;
此时第三次calc函数在等待第四次calc函数的返回结果赋值给res
第四次calc函数执行:
打印1
判断成立,执行return 1
第四次calc函数执行完毕,把1返回给第三次calc函数
第三次calc函数在等待第四次函数的返回结果;
第四次calc函数返回了1
第三次calc函数拿到结果后赋值给res;
第三次calc函数执行return 1返回给第发给次函数
************************
第二次calc函数在等待第三次函数的返回结果;
第三次calc函数返回了1
第二次calc函数把1赋值给res
第二次calc函数执行return 1返回给第一次函数
************************
第一次calc函数在等待第二次函数的返回结果;
第二次calc函数返回了1
第一次calc函数把1赋值给rest
第一次calc函数执行return 1返回给调用它的程序
************************

程序接收到了结果1赋值给变量v
最后打印变量
#递归实例:问路
问路最终分为2种情况:
- 问到最后没人知道;
- 问到某个人时知道;
- 现在假设有个人物列表代表问路时需要问的人
- 假设问到最后Tom知道路
person_list=["zhangsan","lisi","Tom"] #路人列表,需要被问到的人
def find_way():
if len(person_list) == 0:
return "No one know the way" #问到最后没人知道 person=person_list.pop(0) #依次弹出1个人去问 if person == "Tom": #只有Tom才知道,弹出的人不是Tom,表示不知道,需要问下一个人
return "%s said:I know the way,over there" %person
res=find_way()
return res v=find_way()
print(v)
返回结果:
Tom said:I know the way,over there
python之函数递归的更多相关文章
- python基础-函数递归
函数递归 概念:直接或间接地重复调用函数本身,是一种函数嵌套调用的表现形式. 直接调用:在函数内部,直接调用函数本身 def foo(): print("这是foo函数") foo ...
- (十七)python 3 函数递归
递归函数 即自己调用自己,递归中可以函数自身调用自身,但是使用时类似于条件循环一样,要有递归的终止条件 优点:使用递归时,常常可以让代码更加简洁 缺点:递归会占用比较多的内存,当递归次数比较多时,性能 ...
- python 关于函数递归调用自己
爬取b站博人传 每页短评20个,页数超过1000页, 代码如下 import requests import json import csv def main(start_url): headers ...
- python全栈开发-Day12 三元表达式、函数递归、匿名函数、内置函数
一. 三元表达式 一 .三元表达式 仅应用于: 1.条件成立返回,一个值 2.条件不成立返回 ,一个值 def max2(x,y): #普通函数定义 if x > y: return x els ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- python之旅:三元表达式、列表推导式、生成器表达式、函数递归、匿名函数、内置函数
三元表达式 #以下是比较大小,并返回值 def max2(x,y): if x > y: return x else: return y res=max2(10,11) print(res) # ...
- Python之路Python全局变量与局部变量、函数多层嵌套、函数递归
Python之路Python全局变量与局部变量.函数多层嵌套.函数递归 一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局 ...
- python 之 函数 面向过程 三元表达式 函数递归
5.11 面向过程编程思想 核心是'过程'二字,过程即解决问题的步骤,即先干什么,再干什么........ 基于面向过程编写程序就好比在设计一条流水线,是一种机械式的思维方式. 总结优缺点: 优点:复 ...
- python day-15 匿名函数 sorted ()函数 filter()函数 map()函数 递归 二分法
一.匿名函数 匿名函数的结构:变量 = lamda 参数: 返回值 a = lamda x : x*x # x为参数, : 后边的为函数体 print(a(x)) def ...
随机推荐
- [蓝桥杯]PREV-25.历届试题_城市建设
问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修.市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他. C市中有n个比较重要的地点,市长希望这些地点重点被考虑.现在 ...
- 使用Netty开发RPC的技术原理
本片文字摘抄自https://www.cnblogs.com/jietang/p/5615681.html 1.定义RPC请求消息.应答消息结构,里面要包括RPC的接口定义模块,包括远程调用的类名.方 ...
- 为什么HTML中的多个空格或是回车在浏览器上只能显示出一个?
我们在学习HTML的时候可能书本或是老师会告诉我们一件事,就是在HTML中不管我们在两个文本之间加上多少连续的空格或是回车,到了浏览器里面只能显示出一个来.但是我们从来不知道为什么. 原因很简单,因为 ...
- Kong(v1.0.2)代理参考
介绍 在本文中,我们将通过详细解释Kong的路由功能和内部工作原理来介绍它的代理功能. Kong公开了几个接口,可以通过两个配置属性进行调整: proxy_listen,它定义了一个地址/端口列表,K ...
- 洛谷P1039 侦探推理(模拟)
侦探推理 题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情 ...
- 剖析ElasticSearch核心概念,NRT,索引,分片,副本等
ElasticSearch 的核心概念 Near RealTime(NRT) 近实时 近实时有两种意思,一种是从写入数据到可以被搜索到有一个小延迟(大概一秒),还有一种就是基于ElasticSearc ...
- mysql 下的update select from的两种方式比较
工作中遇到需要将一个表中的数据按照对应规则填入别的表中的情况 例如 表1 a a1 a2 11 90889 32 31241 12 52123 表2 b b1 b ...
- Ext 行统计有意思的实现.(js对象的循环, ext列的设置)
考勤界面, 列包含日期. 行的数据格式: 需要实现 编辑一列然后在最后产生的统计的效果. 行数据内容. Gird Load 的时候统计数据: -- 根据对象. 可以Ext.Date.parse 成 ...
- Redis深入学习笔记(四)主从数据复制流程
主从节点的数据复制是Redis高可用和高负载的重要基础,本篇介绍数据的主从复制流程. 数据复制策略: 全量复制:一般用于初次复制场景,Redis早期支持的复制功能只有全量复制,它会把主节点全部数据一次 ...
- c#+cad2010+MQ接收消息
cad2015+版本可以使用TrayItem气泡显示消息 static TrayItem trayItem = new TrayItem(); public static void testtrayi ...