前言:本博文主要讲解Python中的递归,之前在C#中也讲过递归的一些知识——深入理解C#方法重载和递归,有兴趣的朋友可以阅读一下!

文章目录

  • 一、递归的应用场景
  • 二、生活中的递归
    • 1. 故事案例
    • 2. 图片案例
  • 三、递归的应用案例
    • 1. 应用:3以内数字累加和
    • 2. 应用:n以内数字阶乘
    • 3. 应用:斐波拉契数列
  • 四、递归的特点

一、递归的应用场景

递归是一种编程思想,应用场景:

  1. 在我们日常开发中,如果要遍历一个文件夹下面所有的文件,通常会使用递归来实现。
  2. 在后续的算法课程中,很多算法都离不开递归,例如:快速排序。

递归的特点:

  • 函数内部自己调用自己。
  • 必须有出口。

递归算法:递归(Recursion),在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。

二、生活中的递归

1. 故事案例

  1. 我们使用的词典,本身就是递归,为了解释一个词,需要使用更多的词。当你查一个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第二个词,可惜,第二个词里仍然有不懂的词,于是查第三个词,这样查下去,直到有一个词的解释是你完全能看懂的,那么递归走到了尽头,然后你开始后退,逐个明白之前查过的每一个词,最终,你明白了最开始那个词的意思。
  2. 多年前我五岁的儿子问我「不是每条船都有救生艇的吧?」「怎么会呢?」「也许救生艇上会有一艘更小的救生艇,但是那艘小艇上可能就没有更小的救生艇了。」
  3. 一个洋葱是一个带着一层洋葱皮的洋葱。

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)

四、递归的特点

  1. 必须有一个明确的结束条件。
  2. 每次进入更深一层递归时,问题规模(计算量)相比上次递归都应有所减少。
  3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出),此时程序会抛出错误:超出最大递归深度。
  1. 递推:像上边递归实现所拆解,递归每一次都是基于上一次进行下一次的执行,这叫递推。
  2. 回溯:则是在遇到终止条件,则从最后往回返一级一级的把值返回来,这叫回溯。

补充:本博文关于递归的故事案例、图片案例均引用自知乎,感谢读者阅读!

Python中的递归【建议收藏】相关推荐

  1. python对象编程例子-这是我见过最详细的Python面向对象编程!建议收藏!

    原标题:这是我见过最详细的Python面向对象编程!建议收藏! 面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 ...

  2. 艾灸排病反应及解决方案(中),建议收藏!

    艾灸排病反应及解决方案(中),建议收藏! 参考文章: (1)艾灸排病反应及解决方案(中),建议收藏! (2)https://www.cnblogs.com/steadfast/p/10565807.h ...

  3. python中使用递归实现斐波那契数列

    python中使用递归实现斐波那契数列 python中使用递归实现斐波那契数列 先来了解一下 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家莱昂纳多·斐波那契(Leo ...

  4. python 中的递归深度限制和重置

    我的CSDN主页 My Python 学习个人备忘录 我的博文推荐 python 中的递归深度限制和重置 import sys sys.getrecursionlimit() #查看当前递归深度限制 ...

  5. python找出图中所有闭合环_这可能是史上最全的 Python 算法集(建议收藏)

    △蓝字可关注并标星 -数据分析展示就用DataHunter- 导读:本文是一些机器人算法(特别是自动导航算法)的Python代码合集.其主要特点有以下三点: 选择了在实践中广泛应用的算法: 依赖最少: ...

  6. python优化算法工具包_这可能是史上最全的 Python 算法集(建议收藏)

    原标题:这可能是史上最全的 Python 算法集(建议收藏) 导读:本文是一些机器人算法(特别是自动导航算法)的Python代码合集.其主要特点有以下三点: 选择了在实践中广泛应用的算法: 依赖最少: ...

  7. python 三次曲线拟合算法_这可能是史上最全的 Python 算法集(建议收藏)

    导读:本文是一些机器人算法(特别是自动导航算法)的Python代码合集. 其主要特点有以下三点: 选择了在实践中广泛应用的算法: 依赖最少: 容易阅读,容易理解每个算法的基本思想. 希望阅读本文后能对 ...

  8. 31个好用的 Python 字符串方法,建议收藏!

    作者 | 小F 来源 | 法纳斯特 字符串是Python中基本的数据类型,几乎在每个Python程序中都会使用到它. 今天,就带大家学习一下31个最重要的内置字符串方法. 希望大家能从中找到对自己有帮 ...

  9. python中的递归思想_〖Python〗-- 递归、面向对象初识及编程思想

    [递归.面向对象初识及编程思想] 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递归策 ...

最新文章

  1. std::bind技术内幕
  2. python为什么这么火 知乎-没想到吧!Google 排名第一的编程语言,为什么会这么火?...
  3. XTU Dormitory's Elevator(动态规划)
  4. java切换系统输入法_java - 关于Android输入法切换的问题
  5. flink报错org.apache.commons.cli.Option.builder
  6. Http上传Xml文件
  7. shell中用grep查找并且不输出_shell中grep命令详解
  8. Tomcat运行三种模式:http-bio|http-nio|http-apr介绍
  9. 蓝桥杯 ADV-91 算法提高 素数判断
  10. UE4之Import源码解析
  11. js 去空格 和 获得字节数
  12. Cesium教程系列汇总
  13. U盘的针脚板竟然掉了
  14. 北京协和医院付海鸿:医学精准要影像先行,影像精准就要技术先行
  15. ssm项目之Bookstrap创建页面并分页查询
  16. kali安装有道词典
  17. 想要无所不能的女秘书,用Office 365啊
  18. 【java华为机试】HJ10 字符个数统计
  19. 【Python】np.nonzero()函数
  20. 赛昉科技 星光v1 使用笔记

热门文章

  1. 基于ARM的多终端自助打印系统
  2. 关于Transformer你不可不知的几个点
  3. 用微信小程序编写抽奖大转盘
  4. 华为nova5i计算机在哪,华为nova5和nova5i到底选哪个?看完这个就知道了
  5. 静态化与服务器渲染(Static vs. Server Rendering)
  6. PHP 参数名ASCII码从小到大排序(字典序)
  7. c++中int与char相互转换
  8. 只有医者对治好耳鸣心怀希望,耳鸣者才有希望!
  9. 学习关系模式并了解如何辨别范式
  10. Vue 点击眼睛图标不影响input焦点不关闭软键盘