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实现的数据结构与算法之队列详解
Apr 22 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
对pandas中to_dict的用法详解
Jun 05 Python
Python OOP类中的几种函数或方法总结
Feb 22 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
python rsync服务器之间文件夹同步脚本
Aug 29 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 Python
Python如何获取文件路径/目录
Sep 22 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
Nov 19 Python
PyQt QMainWindow的使用示例
Mar 24 Python
Python FuzzyWuzzy实现模糊匹配
Apr 28 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读取RSS feed的代码
2008/08/01 PHP
golang与PHP输出excel示例
2016/07/22 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
Python pickle模块用法实例分析
2015/05/27 Python
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
python之生产者消费者模型实现详解
2019/07/27 Python
python中open函数的基本用法示例
2019/09/07 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
Unix控制后台进程都有哪些进程
2016/09/22 面试题
公司聘任书模板
2014/03/29 职场文书
目标管理责任书
2014/04/15 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
辞职信如何写
2015/02/27 职场文书
我的生日感言
2015/08/03 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书