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实现获取序列中最小的几个元素
Sep 25 Python
Python while 循环使用的简单实例
Jun 08 Python
python实现简易云音乐播放器
Jan 04 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
python实现中文文本分句的例子
Jul 15 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
python可视化实现KNN算法
Oct 16 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
python 实现线程之间的通信示例
Feb 14 Python
Django框架获取form表单数据方式总结
Apr 22 Python
Python实现上下文管理器的方法
Aug 07 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下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
一个javascript参数的小问题
2008/03/02 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
[00:48]DOTA2国际邀请赛公开赛报名开始 扫码开启逐梦之旅
2018/06/06 DOTA
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
应用电子专业学生的自我评价
2013/10/16 职场文书
高校毕业生登记表自我鉴定
2013/11/03 职场文书
护士演讲稿范文
2014/01/05 职场文书
业务总经理岗位职责
2014/02/03 职场文书
元旦促销方案
2014/03/15 职场文书
新年联欢会主持词
2014/03/27 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript