Python函数递归调用实现原理实例解析


Posted in Python onAugust 11, 2020

函数的递归调用:

是函数嵌套调用的一种特殊形式

具体是指:

在调用一个函数的过程中又直接或间接地调用到了本身

# 直接调用本身
def func():
  print('我是func')
  func()

func()
# 函数会不断的运行永远不会结束,但Python不允许这种情况,会默认限制只能调1000次.

# 间接调用本身
def f1():
  print('我是f1')
  f2()
  
def f2():
  print('我是f1')
  f1()

f1()
# 此时也相当于直接调用本身,f1-->f2-->f1-->f2-->f1。。。同样会不断循环

递归不应该无限的调用下去,必须在满足某种条件下结束递归

# 写一个函数获取0-9
def f1(n):
  if n == 10:
    return
  print(n)
  n += 1
  f1(n)
f1(0)
# 0 1 2 3 4 5 6 7 8 9

递归的两个阶段:

1、回溯:一层一层调用下去

2、递推:满足某种条件,结束递归调用,然后一层一层返回。

递归的应用:

例如打印出一个嵌套多层列表内的所有元素

li = [1,2,[3,4,[5,6,[7,8],9]]]
def func(l):
  for i in l:
    if type(i) is list:
      func(i)
    else:
      print(i)

func(li)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
对PyTorch torch.stack的实例讲解
Jul 30 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
python 多线程将大文件分开下载后在合并的实例
Nov 09 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
Python利用itchat库向好友或者公众号发消息的实例
Feb 21 Python
详解python中@的用法
Mar 27 Python
Python Django实现layui风格+django分页功能的例子
Aug 29 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
Python代码执行时间测量模块timeit用法解析
Jul 01 Python
零基础学python应该从哪里入手
Aug 11 #Python
Python如何测试stdout输出
Aug 10 #Python
Python3 ffmpeg视频转换工具使用方法解析
Aug 10 #Python
常用的10个Python实用小技巧
Aug 10 #Python
推荐值得学习的12款python-web开发框架
Aug 10 #Python
python多线程semaphore实现线程数控制的示例
Aug 10 #Python
如何在python中实现线性回归
Aug 10 #Python
You might like
PHP获取网站域名和地址的代码
2008/08/17 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
js实现漫天星星效果
2017/01/19 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
JS实现滑动插件
2020/01/15 Javascript
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
通俗讲解python 装饰器
2020/09/07 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
自主招生自荐信指南
2014/02/04 职场文书
入股协议书范本
2014/04/14 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
党委工作总结2015
2015/04/27 职场文书
新员工入职感言范文!
2019/07/04 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle