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中的yield使用方法
Feb 11 Python
python web框架学习笔记
May 03 Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 Python
Python实现的端口扫描功能示例
Apr 08 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
在Pandas中处理NaN值的方法
Jun 25 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
详解Python图像处理库Pillow常用使用方法
Sep 02 Python
python tkinter canvas使用实例
Nov 04 Python
pyecharts调整图例与各板块的位置间距实例
May 16 Python
Python使用pycharm导入pymysql教程
Sep 16 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获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
PHP开发中四种查询返回结果分析
2011/01/02 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
一个简单的JavaScript 日期计算算法
2009/09/11 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
jQuery自定义添加"$"与解决"$"冲突的方法
2015/01/19 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
Python subprocess模块学习总结
2014/03/13 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Django2.1.7 查询数据返回json格式的实现
2020/12/29 Python
康拓普公司Java笔面试
2016/09/23 面试题
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
高一军训的心得体会
2014/09/01 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
主持稿开场白
2015/06/01 职场文书
在CSS中使用when/else的方法
2022/01/18 HTML / CSS