死循环,因此递归必须要定义一个明确的结束条件
 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 递归的更多相关文章

  1. 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 ...

  2. 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 , = ...

  3. Python day10 global关键字、函数递归、匿名函数、map函数的用法详解

    1.global关键字 引用全局变量,在局部全局变量改变,也会改变,global相当于指针,将地址指向全局变量的name name='littlepage' def littepage(): glob ...

  4. Python线程和协程-day10

    写在前面 上课第10天,打卡: 感谢Egon老师细致入微的讲解,的确有学到东西! 一.线程 1.关于线程的补充 线程:就是一条流水线的执行过程,一条流水线必须属于一个车间: 那这个车间的运行过程就是一 ...

  5. day10 python算法 冒泡算法 二分法 最快查找算法 c3算法

    day10 python       1.冒泡算法         冒泡排序,把列表竖起来看,就像一个个气泡往上去(时间复杂度大) lst = [12,3,3,2424,14,3567,534,324 ...

  6. day10设置文件权限

    day10设置文件权限 yum复习 1.修改IP [root@localhost ~]# sed -i 's#.200#.50#g' /etc/sysconfig/network-scripts/if ...

  7. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

  8. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  9. Android 算法 关于递归和二分法的小算法

     // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public st ...

随机推荐

  1. SQL Server中删除用户时报错,提示:The database principal owns a schema in the database, and cannot be dropped(转载)

    Description of the problem: When you tried to drop a user, you got this message: Error: 15138 The da ...

  2. 两个非常好的bootstrap模板,外送大话设计模式!

    两个非常好的bootstrap模板,外送大话设计模式! 下载地址:http://download.csdn.net/download/wolongbb/10198756

  3. Quartz_简单使用

    第一步:安装 新建一个QuartzDemo项目后,安装下面的程序包 Install-Package Quartz Install-Package Common.Logging.Log4Net1211 ...

  4. part 1

    注意:本次源码分析选择2.0.3(因为不支持IE6.7.8,就少了很多兼容的hack的写法,对了解jQuery的实现原理有很大的帮助) 1.jQuery有不同的版本,从2.x版本便不再支持IE6.7. ...

  5. HTTP协议基础与web服务的重定向,跳转以及请求转发

    JavaWeb中,HttpServletRequest与HttpServletResponse几乎是处理各种请求与操作必备的参数,与原始的ServletRequest/ServletResponse相 ...

  6. http状态码 301、302区别

    http状态码301和302详解及区别——辛酸的探索之路 [HTTP]状态码301与302 HTTP返回码中301与302的区别 http状态码301和302详解及区别

  7. UVA - 116 Unidirectional TSP 多段图的最短路 dp

    题意 略 分析 因为字典序最小,所以从后面的列递推,每次对上一列的三个方向的行排序就能确保,数字之和最小DP就完事了 代码 因为有个地方数组名next和里面本身的某个东西冲突了,所以编译错了,后来改成 ...

  8. 团队项目第二周spec设计

    本系统针对局域网进行联机聊天.聊天室分为服务器端和和客户端俩部分,服务器端程序主要 负责侦听客户端发来的信息,客户端需要登录到服务器端才可以实现正常的聊天功能. 1.本软件是一款局域网聊天软件,不能进 ...

  9. Python学习笔记(三)——条件语句、循环语句

    注:需注意代码的缩进格式 注:需注意代码的缩进格式 注:需注意代码的缩进格式 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断.pyth ...

  10. Selenium IDE 宏 试用 一例

    本质是宏(Macro)理念 Marco概念的广泛应用: 1.Office的Excel里的任何操作的 可以都可以用VBA编程记录下宏,然后把记录的宏,可以回放.当然也可以生成代码,比如给Excel设置单 ...