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的chardet库获得文件编码并修改编码
Jan 22 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
Python+django实现文件下载
Jan 17 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 Python
Python批量修改图片分辨率的实例代码
Jul 04 Python
如何在python中实现随机选择
Nov 02 Python
Python调用.NET库的方法步骤
Dec 27 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 Python
Python读取yaml文件的详细教程
Jul 21 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 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(5) 类和对象
2010/02/16 PHP
Symfony生成二维码的方法
2016/02/04 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
vue2实现数据请求显示loading图
2017/11/28 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
ptyhon实现sitemap生成示例
2014/03/30 Python
Python多进程编程技术实例分析
2014/09/16 Python
python实现图片变亮或者变暗的方法
2015/06/01 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
linux下进程间通信的方式
2014/12/23 面试题
工作推荐信范文
2014/05/10 职场文书
同学聚会策划方案
2014/06/06 职场文书
欢迎领导检查标语
2014/06/27 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js