死循环,因此递归必须要定义一个明确的结束条件
 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. samba服务,连接远程开发机

    到了新环境,自己的开发机需要通过跳板机连,每次登录跳板机都需要RSA动态密码.一开始让我迷惑的是,这有个跳板机,那怎么让本地代码和开发机代码同步呢.以前公司的情况,一个是不需要跳板机,在phpstor ...

  2. BZOJ 2784 时间流逝

    BZOJ 2784 时间流逝 古典概率论... 可以发现由于能量圈数量限制,所以所构成的必定为树状结构(即便是转成最小能量圈和能量圈权值和之后存在重复状态,但是每个状态的含义不同,而且不能自身转移自身 ...

  3. es5中for...in 和es6中 for..of遍历

    //定义一个数组 var arr=['A','B','C']; //定义一个对象 var obj={name:'张三',age:20} // for..in 遍历数组 得到索引 for(var x i ...

  4. NOI Day1线上同步赛梦游记

    Preface 第一次体验NOI,虽然不是正式选手,但是打打同步赛还是挺涨姿势的,也算是体验了一把. Day1很爆炸,一方面是NOI题目的难度高于自身的水平,另一方面也出现了比较大的失误,T1一个数组 ...

  5. RHEL7VIM编辑器

    本文介绍Vim编辑器的使用 vi和vim的区别 它们都是多模式编辑器 不同的是vim是vi的升级版本 它不仅兼容vi的所有指令而且还有一些新的特性在里面 vim的这些优势主要体现在以下几个方面 多级撤 ...

  6. Hogp连接流程分析

    当BLE设备已经完成配对,并且完成GATT服务的搜索,下一步就开始profile 的连接流程了,一般LE设备都是走的HOGP的流程,我们这篇文章就分析一下hogp的连接流程. 连接是从framewor ...

  7. .Net并行编程(一)-TPL之数据并行

    前言 许多个人计算机和工作站都有多个CPU核心,可以同时执行多个线程.利用硬件的特性,使用并行化代码以在多个处理器之间分配工作. 应用场景 文件批量上传 并行上传单个文件.也可以把一个文件拆成几段分开 ...

  8. Houdini toolset environment variable setting

    Game Development Toolset HOUDINI_PATH = "C:\Users\fooldrifter\Documents\houdini17.5\GameDevelop ...

  9. 针对负载均衡集群中的session解决方案的总结

    在日常运维工作中,当给Web站点使用负载均衡之后,必须面临的一个重要问题就是Session的处理办法,无论是PHP.Python.Ruby还是Java语言环境,只要使用服务器保存Session,在做负 ...

  10. centos6.8下LNMP (nginx1.8.0+php5.6.10+mysql5.6.12) - 部署手册

    在平时运维工作中,经常需要用到LNMP应用框架.以下对LNMP环境部署记录下: 1)前期准备:为了安装顺利,建议先使用yum安装依赖库[root@opd ~]#yum install -y make ...