函数递归

概念:直接或间接地重复调用函数本身,是一种函数嵌套调用的表现形式。

直接调用:在函数内部,直接调用函数本身

def foo():
print("这是foo函数")
foo() foo() # 进入死循环

间接调用:两个函数之间相互调用间接造成递归

def a_func():
print("这是a_func函数")
b_func() def b_func():
print("这是b_func函数")
a_func() a_func()

话说,大家千万不要执行以上代码!!!!电脑配置不好,宕机了的,不要来找我!以上两个例子都陷入了死循环。而这确实是递归!重点来了!

单纯递归调用时,没有任何意义

如果想要有意义,必须遵循两个条件:

  1. 回溯:重复地执行,每一次执行都要拿到一个更接近结果的结果。回溯必须要有一个明确的终止条件
  2. 递推:当回溯找到一个终止条件后,开始一步一步往上递推。
def age(n):
if n == 1:
return 18
# 此处必须写上return 才能实现递推
return age(n - 1) + 2 print(age(5))

扩展

递归的经典案例习题
1、递归求阶乘 1!+2!+3!+4!+5!+...+n!
2、使用递归打印斐波那契数列,(前两个数的和得到第三个数,如:0 1 1 2 3 5 8...)
3、一个嵌套很多层的列表,如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]],用递归取出所有的值

最新文章

  1. finla变量,方法和类
  2. 【noiOJ】p8206
  3. Commons CLI - Option Properties
  4. bzoj1046
  5. div的优缺点
  6. swiper.js 碰到的坑
  7. Nginx文档-初学者指南
  8. LinkedHashMap和HashMap
  9. sprintf格式化字符串带来的注入隐患
  10. rpm包与 yum 安装与卸载
  11. angular 组件学习-组件内属性绑定
  12. ES--01
  13. Confluence 6 workbox 包含从 Jira 来的通知
  14. HI3518E平台ISP调试环境搭建
  15. rgbdslam 源代码的实现
  16. imooc 生鲜超市笔记
  17. Python解析xml文件遇到的编码解析的问题
  18. maven打包报错:在类路径或引导类路径中找不到程序包 java.lang
  19. cf1043C. Smallest Word(贪心)
  20. Mac OS X显示隐藏文件命令

热门文章

  1. shell基础知识4--别名、采集终端信息
  2. iOS - 使用SDWebImage缓存图片,MJPhotoBrowser展示图片的问题
  3. Java 动态代理与AOP
  4. 【linux基础】如何配置ubuntu系统为静态IP地址
  5. c#.net EF DB FIRST 添加新的模型
  6. c#之break和continue的区别
  7. Java 注解基本原理
  8. C++的菱形继承会发生什么问题?如何解决?画出其内存布局图
  9. mysql求中位数
  10. webbench网站测压工具源码分析