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海龟绘图实例教程
Jul 24 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
Apr 11 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
pywinauto自动化操作记事本
Aug 26 Python
selenium 多窗口切换的实现(windows)
Jan 18 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
pandas数据处理之绘图的实现
Jun 15 Python
重构Python代码的六个实例
Nov 25 Python
Python解析微信dat文件的方法
Nov 30 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 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 中的一些经验积累
2006/10/09 PHP
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
ThinkPHP安装和设置
2015/07/27 PHP
PHP实现验证码校验功能
2017/11/16 PHP
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
基python实现多线程网页爬虫
2015/09/06 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
Python 使用多属性来进行排序
2019/09/01 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
Django数据库迁移常见使用方法
2020/11/12 Python
html5清空画布方法(三种)
2017/10/16 HTML / CSS
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
大学生先进事迹材料
2014/02/16 职场文书
小班下学期评语
2014/05/04 职场文书
计划生育个人总结
2015/03/02 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
Python必备技巧之字符数据操作详解
2022/03/23 Python