Python3基础教程之递归函数简单示例


Posted in Python onJune 07, 2019

概述

递归函数即直接或间接调用自身的函数,且递归过程中必须有一个明确的递归结束条件,称为递归出口。递归极其强大一点就是能够遍历任意的,不可预知的程序的结构,比如遍历复杂的嵌套列表。

递归求和

我们可以利用递归函数实现一个Python内置函数sum()的递归版。

# 递归
def d_sum(L):
  if not L:
    return 0
  else:
    return L[0] + d_sum(L[1:])

sum_l = d_sum(range(10))
print(sum_l)

示例结果

45

该递归函数怎么实现列表元素相加的呢? 我们知道函数是有本地作用域的,对函数调用的每一个打开的时候,在运行时调用堆栈上都有自己的一个本地作用域的副本,即L在每个层级都是不同的,比如我们可以通过每次调用时添加一个打印语句,更加直观展示每个层级L的情况

# 递归
def d_sum(L):
  # 打印该层级L
  print(L)
  if not L:
    return 0
  else:
    return L[0] + d_sum(L[1:])
# 构建 0-10 数字元素列表
L = [i for i in range(10)]
sum_l = d_sum(L)
print(sum_l)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4, 5, 6, 7, 8, 9]
[3, 4, 5, 6, 7, 8, 9]
[4, 5, 6, 7, 8, 9]
[5, 6, 7, 8, 9]
[6, 7, 8, 9]
[7, 8, 9]
[8, 9]
[9]
[]
45

处理任意结构

比如我们可以利用递归计算一个嵌套的子列表结构中所有数字的总和

def dd_sum(L):
  tot = 0
  for x in L:
    if not isinstance(x, list):
      tot += x
    else:
      tot += dd_sum(x)
  return tot

# 嵌套列表
L = [1,[2,3],[4,[5,6,7],8],9]
sum_l = dd_sum(L)
print(sum_l)

示例结果:

45

这种处理方式看似复杂,我们可能更多会利用循环语句替代,但是使用递归函数逻辑简单清晰,这是使用的一大优点。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python实现rest请求api示例
Apr 22 Python
python进阶教程之循环对象
Aug 30 Python
跟老齐学Python之编写类之二方法
Oct 11 Python
python统计一个文本中重复行数的方法
Nov 19 Python
Python的Bottle框架的一些使用技巧介绍
Apr 08 Python
详解在Python和IPython中使用Docker
Apr 28 Python
在Django的URLconf中使用命名组的方法
Jul 18 Python
Python 列表理解及使用方法
Oct 27 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
Python正则表达式匹配和提取IP地址
Jun 06 #Python
Python 常用模块 re 使用方法详解
Jun 06 #Python
Python比较配置文件的方法实例详解
Jun 06 #Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 #Python
创建Django项目图文实例详解
Jun 06 #Python
Django网络框架之HelloDjango项目创建教程
Jun 06 #Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 #Python
You might like
php生成固定长度纯数字编码的方法
2015/07/09 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
推荐4个原生javascript常用的函数
2015/01/12 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
python中split方法用法分析
2015/04/17 Python
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
python编写弹球游戏的实现代码
2018/03/12 Python
python pyheatmap包绘制热力图
2018/11/09 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
车工岗位职责
2013/11/26 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
老公给老婆的保证书
2014/04/28 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
机器人瓦力观后感
2015/06/12 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang
Python实战之OpenCV实现猫脸检测
2021/06/26 Python