1 递归定义

函数直接或间接调用函数本身,则该函数称为递归函数

2 递归特点

Python函数递归调用,会用到栈

– 这里的栈是函数/程序运行时系统为其分配的一段内存区

– 栈具有 后进先出 的特性

– 该段内存区域大小有限,大小跟系统有关

– 该区用来存储局部变量等

– 递归函数,调用时借助这个区域存放中间过程

– 所以递归有层数限制

3 优缺点

优点:把问题简单化,让逻辑调理清晰

缺点:递归是一种运行效率不高的调用方式,消耗很多系统资源;一般的编程语言对递归的层数有一定的限制

4 递归函数的设计

递推阶段:从原问题出发,按照递归的调用方法逐渐推进,从未知到已知,直到终止条件

回归阶段:按照终止条件求出结果,逐层的回归带入原问题

终止条件: 一定要有终止条件 ,并且终止一定出现在函数的内部调用之前

5 实现递归函数

如:计算整数n的阶层

循环:

def fact(n):
    r = 1
    i = 1
    while i <= n:
        r = r * i
        i = i + 1
    return r

a = fact(5)
print(a)

递归:

def fact(n):
    if n == 1:
        return 1
    else:
        return n * fact(n - 1)

a = fact(5)
print(a)

5.1计算阶层递归的执行过程解析

fact(5)

1、5 * fact(4)
2、5 * (4 * fact(3))
3、5 * (4 * (3 * fact(2)))
4、5 * (4 * (3 * (2 * fact(1)))) 5、5 * (4 * (3 * (2 * 1)))
6、5 * (4 * (3 * 2))
7、5 * (4 * 6)
8、5 * 24
9、120

6 小结

• 使用递归必须有一个终止条件

• 使用递归优点——实现简单,结构清晰

• 理论上递归都可以用循环来实现

• 递归要防止栈溢出,有调用层数限制

Python学习笔记010——递归函数的更多相关文章

  1. Python学习笔记010——匿名函数lambda

    1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...

  2. python学习笔记(递归函数)

    博主看了看递归.说的简单点就是程序里面再调用程序本身,或者是方法里面再调研方法本身.或者是函数里面再调研函数本身 用于什么场景呢,博主这里是父子节点排序,父子节点的查询 直接上代码: #!/usr/b ...

  3. Python学习笔记010——作用域

    1 作用域的分类 全局变量:在文件中所有函数外部创建的变量,整个文件可见 局部变量:在函数.类等内部创建的变量且仅用在函数内部的变量: 函数的形参也是局部变量. 注:所有的变量必须是先创建,再使用. ...

  4. Python学习笔记010——函数文档字符串

    函数文档字符串documentation string (docstring)是在函数开头,用来解释其接口的字符串.简而言之:帮助文档 包含函数的基础信息 包含函数的功能简介 包含每个形参的类型,使用 ...

  5. Python学习笔记010——形参与实参

    在使用中忽略了一个问题,形参有些和实参类似,也不能是“关键字后面含有位置参数”,即“默认形参”后面必须不能含有“位置”形参! def test(a=100,b): print("test&q ...

  6. Python学习笔记010

    倒三角 num2 = int(input("Line:")) while num2 > 0:    num1 = num2    while num1 > 0:     ...

  7. Python学习笔记(八)

    Python学习笔记(八): 复习回顾 递归函数 内置函数 1. 复习回顾 1. 深浅拷贝 2. 集合 应用: 去重 关系操作:交集,并集,差集,对称差集 操作: 定义 s1 = set('alvin ...

  8. python学习笔记(二)、字符串操作

    该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.字符串基本操作 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于 ...

  9. Python学习笔记(二):条件控制语句与循环语句及常用函数的用法

    总结的内容: 1.条件控制语句 2.while循环语句 3.for循环语句 4.函数的用法 一.条件控制语句 1.介绍 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决 ...

随机推荐

  1. Mybatis映射实体改造和异常问题

    现在WEB开发经常使用 Mybatis 作为持久化框架,在开发过程中,会在Java代码中构建实体类与数据库表字段相互映射, 下面提出一个关于映射实体优化的方案:通过链式编程实现给实例对象赋值. 参考代 ...

  2. Sort Colors leetcode java

    题目: Given an array with n objects colored red, white or blue, sort them so that objects of the same ...

  3. js常用的事件对象

    事件源对象  event.srcElement.tagName  event.srcElement.type 捕获释放  event.srcElement.setCapture();   event. ...

  4. UNdelete

    --90兼容模式以上,2005+ -- http://raresql.com/2012/10/24/sql-server-how-to-find-who-deleted-what-records-at ...

  5. maven编译报错 -source 1.7 中不支持 lambda 表达式

    Maven项目编译失败: [ERROR] COMPILATION ERROR : [INFO] ---------------------------------------------------- ...

  6. Java从零开始学六(运算符)

    运算符 一.赋值运算符号 No. 赋值运算符号 描述 1 = 赋值 int num=22; System.out.println("num= "+num); num=num-3; ...

  7. 谷歌地图api訪问失败

    在非外网情况下.我们调用谷歌api会出现载入不到地图的现象.此时能够换一下域名试试或许就好了 比方我自己訪问api时时这样写的: https://maps.googleapis.com/maps/ap ...

  8. 算法笔记_211:第七届蓝桥杯软件类决赛部分真题(Java语言A组)

    目录 1 阶乘位数 2 凑平方数 3 棋子换位 4 机器人塔 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 阶乘位数 阶乘位数 9的阶乘等于:362880 它的二进制表示为:10110001001 ...

  9. 算法笔记_174:历届试题 地宫取宝(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明 ...

  10. VB中如何修改treeview的背景色

    改变 TreeView 的背景    Private Declare Function SendMessage Lib "User32" Alias "SendMessa ...