一、递归特性

1.必须有一个明确的结束条件

2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会 减少一层栈帧,由于栈的大小不是无限的,所以递归调用的次数越多,会导致栈溢出)

二、一个简单的递归

def calc(n):
print(n)
if int(n / 2) == 0:
return n
res = calc(int(n / 2))
return res a = calc(10)
print(a)

三、一个复杂点的递归(问路)

import time
ask_person = ['大白', '张敏', '刘文豪']
def ask(ask_person):
print("-"*60)
if len(ask_person) == 0:
return '没有人知道'
person = ask_person.pop(0)
if person == '刘文豪':
return '%s说河南工业大学在高新区莲花街'%person
print('Hi %s请问河南工业大学在哪'%person)
print('%s回答道:我也不知道,看你人傻钱多帮你问问%s'%(person, ask_person))
time.sleep(3)
ars = ask(ask_person)
print('%s问的结果是%s'%(person, ars))
return ars a = ask(ask_person)
print(a)

python课堂整理12---递归的更多相关文章

  1. python课堂整理4---列表的魔法

    一.list   类, 列表 li = [1, 12, 9, "age", ["大白", "小黑"], "alex"] ...

  2. python课堂整理1

      1.变量 变量只能由字母.数字.下划线组成 特例:1.变量不能用数字开头    2.不能是python的关键字 3.最好不要和python内置的东西重复 让变量名有意义 些 python3的关键字 ...

  3. python课堂整理19----迭代器和生成器

    一.概念 • 迭代器协议: 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个stopIteration异常,以终止迭代(只能往后走,不能往前退) • 协议是一种约定,pyt ...

  4. python课堂整理18---文件操作(下)

    一.b模式,字节方式(二进制的单位),rb wb ab f = open('test.py', 'rb', encoding = 'utf-8') 报错,因为用了b模式,就不能再指定编码格式了,已经指 ...

  5. python课堂整理16---内置函数

    1. abs :求绝对值 print(abs(-1)) 2. all()传入一个可迭代对象,对该对象进行bool值运算,若都为True 就返回True,有一个为假,就返回False print(all ...

  6. python课堂整理14---函数式编程

    一.分类 当下主流的编程方法大体分为三类 1. 面向过程 2. 函数式 3. 面向对象 二.函数式编程:函数式 = 编程语言定义的函数 + 数学意义的函数 特征:1. 不可变数据 2. 第一类对象 3 ...

  7. python课堂整理10---局部变量与全局变量

    一.局部变量与全局变量 1. 没有缩进,顶头写的变量为全局变量 2. 在子程序里定义的变量为局部变量 3. 只有函数能把变量私有化 name = 'lhf' #全局变量 def change_name ...

  8. python课堂整理8---字符串格式化

    一.字符串格式化(% 和 format) 1. % s  主要接收字符串类型,也可以接收任意类型 tp1 = "i am %s my hobby is alex" % 'lhf' ...

  9. python课堂整理7---集合

    前面小节: sep 用来控制每个元素间的间隔符号 print("alex", "dabai", "liu", sep = "&qu ...

随机推荐

  1. C++中的new,operator new与placement new

    以下是C++中的new,operator new与placement new进行了详细的说明介绍,需要的朋友可以过来参考下     new operator/delete operator就是new和 ...

  2. 每日一问:到底为什么属性动画后 View 在新位置还能响应事件

    在 Android 开发中,我们难免会使用动画来处理各种各样的动画效果,以满足 UI 的高逼格设计.对于比较复杂的动画效果,我们通常会采用著名的开源库:lottie-android,或许你会对 lot ...

  3. 如何开发优质的 Flutter App:应用架构的搭建

    各位读者朋友们,好久不见了! 最近博主一直在忙于工作以及写<Flutter入门与应用实战>的书,所以没有时间打理博客.今天来给大家分享一个博主在GitChat上发起的一场Chat. 下面是 ...

  4. React躬行记(4)——生命周期

    组件的生命周期(Life Cycle)包含三个阶段:挂载(Mounting).更新(Updating)和卸载(Unmounting),在每个阶段都会有相应的回调方法(也叫钩子)可供选择,从而能更好的控 ...

  5. 拉格朗日乘子法 - KKT条件 - 对偶问题

    接下来准备写支持向量机,然而支持向量机和其他算法相比牵涉较多的数学知识,其中首当其冲的就是标题中的拉格朗日乘子法.KKT条件和对偶问题,所以本篇先作个铺垫. 大部分机器学习算法最后都可归结为最优化问题 ...

  6. 一篇文章概括 Java Date Time 的使用

    本文目的:掌握 Java 中日期和时间常用 API 的使用. 参考:Jakob Jenkov的英文教程Java Date Time Tutorial 和 JavaDoc 概览 Java 8 新增 AP ...

  7. php+mysql新无线级分类

    create table cat( id int unsigned not null primary key auto_increment, pid , path ) not null default ...

  8. 四种途径提升RabbitMQ传输数据的可靠性

    前言 RabbitMQ虽然有对队列及消息等的一些持久化设置,但其实光光只是这一个是不能够保障数据的可靠性的,下面我们提出这样的质疑: (1)RabbitMQ生产者是不知道自己发布的消息是否已经正确达到 ...

  9. HashMap原理(一) 概念和底层架构

    HashMap在Java开发中使用的非常频繁,可以说仅次于String,可以和ArrayList并驾齐驱,准备用几个章节来梳理一下HashMap.我们还是从定义一个HashMap开始. HashMap ...

  10. STM32 HAL库学习系列第7篇---定时器TIM 输入捕获功能

    测量脉冲宽度或者测量频率   基本方法 1.设置TIM2 CH1为输入捕获功能:  2.设置上升沿捕获:  3.使能TIM2 CH1捕获功能:  4.捕获到上升沿后,存入capture_buf[0], ...