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 相关文章推荐
在Windows8上的搭建Python和Django环境
Jul 03 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
使用Python对微信好友进行数据分析
Jun 27 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
简单了解Django ORM常用字段类型及参数配置
Jan 07 Python
Python3爬虫发送请求的知识点实例
Jul 30 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 Python
python MD5加密的示例
Oct 19 Python
python两种获取剪贴板内容的方法
Nov 06 Python
python drf各类组件的用法和作用
Jan 12 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+MYSQL开发工具及资源收藏
2007/01/02 PHP
php学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
PHP 第一节 php简介
2012/04/28 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
python 编码规范整理
2018/05/05 Python
django输出html内容的实例
2018/05/27 Python
详解Python 协程的详细用法使用和例子
2018/06/15 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
python三引号如何输入
2020/07/06 Python
python用Configobj模块读取配置文件
2020/09/26 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
事业单位个人应聘自荐信
2013/09/21 职场文书
优秀学生干部个人的自我评价
2013/10/04 职场文书
求职简历推荐信范文
2013/12/02 职场文书
合作协议书
2014/04/23 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
单位婚育证明范本
2014/11/21 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
单位收入证明范本
2015/06/18 职场文书
投诉信格式范文
2015/07/02 职场文书
欠条格式范本
2015/07/03 职场文书
干货分享:推荐信写作技巧!
2019/06/21 职场文书
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers