day10 递归
死循环,因此递归必须要定义一个明确的结束条件
def calc(n):
print(n)
calc(n)
calc(10)
return 表示终止符号,最终会得出一个确切的返回值,且可以赋值
def calc(n):
print(n)
if int(n/2) == 0:
return n
return calc(int(n/2)) a = calc(10)
print(a)
总结:
递归即函数调用自己
递归不能死循环,真的会死的
递归每次进入更深一层的时候,必须要规模减少
递归的效率很低,当前层在调用下一层的时候,要停滞当前层且保存当前层的状态等待下一层的计算返回值,
倘若下一层继续调用下下一层同理,会无限循环保存导致栈溢出甚至内存不足
正确的递归
def num (n):
print(n)
if int(n/2) == 0:
return n
return num(int(n/2))
a = num(10)
print(a)
ps:小练习
斐波那契数列 第n个数字是多少
# 1,1,2,3,5,8,13,21.....
# 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):
if n == 1 or n == 2:
return 1
return fib(n-1) +fib(n-2)
print(fib(40))
大练习 问路递归练习
import time person_list=['alex','wupeiqi','linhaifeng','zsc',"yangtuo"]
def ask_way(person_list):
print('-'*60)
if len(person_list) == 0:
return '根本没人知道'
person=person_list.pop(0)
if person == 'linhaifeng':
return '%s说:我知道,老男孩就在沙河汇德商厦,下地铁就是' %person print('hi 美男[%s],敢问路在何方' % person)
print('%s回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问%s...' % (person, person_list))
time.sleep(5)
res=ask_way(person_list) print('%s问的结果是: %res' %(person,res))
return res res=ask_way(person_list)
print(res) # 流程
# 列表有5人。先问alex, 不满足return条件判断,弹alex, 没有返回值,用剩下的列表作为参数继续运行函数,并等待一个返回值
# 列表剩4人。再问wupeiqi, 不满足return条件判断,弹wupeiqi, 无法返回值,用剩下的列表作为参数继续运行函数,并等待一个返回值
# 列表剩3人。再问linhaifeng, 满足return条件判断,函数中断,返回值即问路结果,
# 返回值返回上一层,即wupeiqi层, wupeiqi层获得返回值, 子函数结束,继续返回上一层
# 返回值返回上一层,即alex层, alex 层获得返回值, 子函数结束,继续返回上一层
# 问路主函数得到最终返回值问路结果,函数结束。 import time
res=time.sleep(5)
print('----------->')
day10 递归的更多相关文章
- python day 9: xlm模块,configparser模块,shutil模块,subprocess模块,logging模块,迭代器与生成器,反射
目录 python day 9 1. xml模块 1.1 初识xml 1.2 遍历xml文档的指定节点 1.3 通过python手工创建xml文档 1.4 创建节点的两种方式 1.5 总结 2. co ...
- day10作业—(闭包迭代器递归)
补充:一个星号的 打散和聚合 a, b , *c = [1,2, 1,4] print( a , b , *c) #1 2 1 4 print(a, b, c) #1 2 [1, 4] *c , = ...
- Python day10 global关键字、函数递归、匿名函数、map函数的用法详解
1.global关键字 引用全局变量,在局部全局变量改变,也会改变,global相当于指针,将地址指向全局变量的name name='littlepage' def littepage(): glob ...
- Python线程和协程-day10
写在前面 上课第10天,打卡: 感谢Egon老师细致入微的讲解,的确有学到东西! 一.线程 1.关于线程的补充 线程:就是一条流水线的执行过程,一条流水线必须属于一个车间: 那这个车间的运行过程就是一 ...
- day10 python算法 冒泡算法 二分法 最快查找算法 c3算法
day10 python 1.冒泡算法 冒泡排序,把列表竖起来看,就像一个个气泡往上去(时间复杂度大) lst = [12,3,3,2424,14,3567,534,324 ...
- day10设置文件权限
day10设置文件权限 yum复习 1.修改IP [root@localhost ~]# sed -i 's#.200#.50#g' /etc/sysconfig/network-scripts/if ...
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
- 算法笔记_013:汉诺塔问题(Java递归法和非递归法)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...
- Android 算法 关于递归和二分法的小算法
// 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public st ...
随机推荐
- Ionic下的JPush缺少统计代码问题解决方法
用Ionic打包apk后安装到手机,收到缺少统计代码的提示,解决方法如下: 1. 找到了 platforms/android/src/com/ionichina/ioniclub/MainActiov ...
- 更换pip源到国内镜像
1.pip国内的一些镜像 阿里云 https://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/ ...
- Code Review —— by12061154Joy
对结对队友刘丽萍的代码进行了复审: 优点: 1,代码逻辑正确,基本能够完全需求 2,用了不少C#自带的函数,第一次写C#,相信是查阅了不少资料,虽然还有很多地方值得优化,不过第一次能做到这样已经很不错 ...
- Linux内核分析作业 NO.7
可执行程序的装载 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实 ...
- 《Linux内核分析》实践4
<Linux内核分析> 实践四--ELF文件格式分析 20135211李行之 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格 ...
- 2017-2018-2 1723《程序设计与数据结构》第九周作业 & 第二周结对编程 总结
作业地址 第九次作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1878 (作业界面已评分,可随时查看,如果对自己的评分有意 ...
- mybatis中批量更新的问题
问题:使用mybatis在执批量更新操作时,一直报错执行失败 解决方法: 首先打印了SQL语句,发现SQL语句拿出来执行没问题,也可以批量执行.SQL没问题,应该是配置的问题. 在网上查询和很多资料, ...
- MyBatis中if,where,set标签
<if>标签 <select id="findActiveBlogWithTitleLike" resultType="Blog"> S ...
- EasyUI treegrid 模糊查询、搜索
纯JS完成 treegrid 模糊搜索功能: $("#dataTab").treegrid({ url: '/Organization/GetOrganizationList', ...
- jQuery中empty与html("")的区别对比
简单的说empty,首先循环给后代元素移除绑定(释放内存).清除jquery给此dom的cache,然后循环removeFirstChild,而html(''),则是简单暴力的设置innerHTML ...