Python中的递归【建议收藏】
前言:本博文主要讲解Python中的递归,之前在C#中也讲过递归的一些知识——深入理解C#方法重载和递归,有兴趣的朋友可以阅读一下!
文章目录
- 一、递归的应用场景
- 二、生活中的递归
- 1. 故事案例
- 2. 图片案例
- 三、递归的应用案例
- 1. 应用:3以内数字累加和
- 2. 应用:n以内数字阶乘
- 3. 应用:斐波拉契数列
- 四、递归的特点
一、递归的应用场景
递归是一种编程思想,应用场景:
- 在我们日常开发中,如果要遍历一个文件夹下面所有的文件,通常会使用递归来实现。
- 在后续的算法课程中,很多算法都离不开递归,例如:快速排序。
递归的特点:
- 函数内部自己调用自己。
- 必须有出口。
递归算法:递归(Recursion),在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。
二、生活中的递归
1. 故事案例
- 我们使用的词典,本身就是递归,为了解释一个词,需要使用更多的词。当你查一个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第二个词,可惜,第二个词里仍然有不懂的词,于是查第三个词,这样查下去,直到有一个词的解释是你完全能看懂的,那么递归走到了尽头,然后你开始后退,逐个明白之前查过的每一个词,最终,你明白了最开始那个词的意思。
- 多年前我五岁的儿子问我「不是每条船都有救生艇的吧?」「怎么会呢?」「也许救生艇上会有一艘更小的救生艇,但是那艘小艇上可能就没有更小的救生艇了。」
- 一个洋葱是一个带着一层洋葱皮的洋葱。
2. 图片案例
三、递归的应用案例
1. 应用:3以内数字累加和
- 代码
# 3 + 2 + 1
def sum_numbers(num):# 1.如果是1,直接返回1 -- 出口if num == 1:return 1# 2.如果不是1,重复执行累加并返回结果return num + sum_numbers(num-1)sum_result = sum_numbers(3)
# 输出结果为6
print(sum_result)
- 执行结果
2. 应用:n以内数字阶乘
# 阶乘函数
def Fact(n):if n == 1:return 1return n * Fact(n-1)
3. 应用:斐波拉契数列
def Fibo(n):# 出口if n == 1 or n == 2:return 1else:return Fibo(n - 1) + Fibo(n - 2)
四、递归的特点
- 必须有一个明确的结束条件。
- 每次进入更深一层递归时,问题规模(计算量)相比上次递归都应有所减少。
- 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出),此时程序会抛出错误:超出最大递归深度。
- 递推:像上边递归实现所拆解,递归每一次都是基于上一次进行下一次的执行,这叫递推。
- 回溯:则是在遇到终止条件,则从最后往回返一级一级的把值返回来,这叫回溯。
补充:本博文关于递归的故事案例、图片案例均引用自知乎,感谢读者阅读!
Python中的递归【建议收藏】相关推荐
- python对象编程例子-这是我见过最详细的Python面向对象编程!建议收藏!
原标题:这是我见过最详细的Python面向对象编程!建议收藏! 面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 ...
- 艾灸排病反应及解决方案(中),建议收藏!
艾灸排病反应及解决方案(中),建议收藏! 参考文章: (1)艾灸排病反应及解决方案(中),建议收藏! (2)https://www.cnblogs.com/steadfast/p/10565807.h ...
- python中使用递归实现斐波那契数列
python中使用递归实现斐波那契数列 python中使用递归实现斐波那契数列 先来了解一下 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家莱昂纳多·斐波那契(Leo ...
- python 中的递归深度限制和重置
我的CSDN主页 My Python 学习个人备忘录 我的博文推荐 python 中的递归深度限制和重置 import sys sys.getrecursionlimit() #查看当前递归深度限制 ...
- python找出图中所有闭合环_这可能是史上最全的 Python 算法集(建议收藏)
△蓝字可关注并标星 -数据分析展示就用DataHunter- 导读:本文是一些机器人算法(特别是自动导航算法)的Python代码合集.其主要特点有以下三点: 选择了在实践中广泛应用的算法: 依赖最少: ...
- python优化算法工具包_这可能是史上最全的 Python 算法集(建议收藏)
原标题:这可能是史上最全的 Python 算法集(建议收藏) 导读:本文是一些机器人算法(特别是自动导航算法)的Python代码合集.其主要特点有以下三点: 选择了在实践中广泛应用的算法: 依赖最少: ...
- python 三次曲线拟合算法_这可能是史上最全的 Python 算法集(建议收藏)
导读:本文是一些机器人算法(特别是自动导航算法)的Python代码合集. 其主要特点有以下三点: 选择了在实践中广泛应用的算法: 依赖最少: 容易阅读,容易理解每个算法的基本思想. 希望阅读本文后能对 ...
- 31个好用的 Python 字符串方法,建议收藏!
作者 | 小F 来源 | 法纳斯特 字符串是Python中基本的数据类型,几乎在每个Python程序中都会使用到它. 今天,就带大家学习一下31个最重要的内置字符串方法. 希望大家能从中找到对自己有帮 ...
- python中的递归思想_〖Python〗-- 递归、面向对象初识及编程思想
[递归.面向对象初识及编程思想] 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递归策 ...
最新文章
- std::bind技术内幕
- python为什么这么火 知乎-没想到吧!Google 排名第一的编程语言,为什么会这么火?...
- XTU Dormitory's Elevator(动态规划)
- java切换系统输入法_java - 关于Android输入法切换的问题
- flink报错org.apache.commons.cli.Option.builder
- Http上传Xml文件
- shell中用grep查找并且不输出_shell中grep命令详解
- Tomcat运行三种模式:http-bio|http-nio|http-apr介绍
- 蓝桥杯 ADV-91 算法提高 素数判断
- UE4之Import源码解析
- js 去空格 和 获得字节数
- Cesium教程系列汇总
- U盘的针脚板竟然掉了
- 北京协和医院付海鸿:医学精准要影像先行,影像精准就要技术先行
- ssm项目之Bookstrap创建页面并分页查询
- kali安装有道词典
- 想要无所不能的女秘书,用Office 365啊
- 【java华为机试】HJ10 字符个数统计
- 【Python】np.nonzero()函数
- 赛昉科技 星光v1 使用笔记