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 translator使用实例
Sep 06 Python
Python的词法分析与语法分析
May 18 Python
把项目从Python2.x移植到Python3.x的经验总结
Apr 20 Python
python绘图方法实例入门
May 19 Python
Python if语句知识点用法总结
Jun 10 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
opencv3/python 鼠标响应操作详解
Dec 11 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
Python实战之实现简易的学生选课系统
May 25 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制作简单的内容采集器的代码
2007/11/28 PHP
php str_pad 函数用法简介
2009/07/11 PHP
解析PHP工厂模式的好处
2013/06/18 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
jQuery中阻止冒泡事件的方法介绍
2014/04/12 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
js实现小星星游戏
2020/03/23 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python 实现视频流下载保存MP4的方法
2019/01/09 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
《画家乡》教学反思
2014/04/22 职场文书
班级旅游计划书
2014/05/03 职场文书
酒店员工培训方案
2014/06/02 职场文书
询价采购方案
2014/06/09 职场文书
社区清明节活动总结
2014/07/04 职场文书
2014年实验室工作总结
2014/12/03 职场文书
早安问候语大全
2015/11/10 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书