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重新引入被覆盖的自带function
Jul 16 Python
详解Python3中字符串中的数字提取方法
Jan 14 Python
对numpy.append()里的axis的用法详解
Jun 28 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
selenium+python自动化测试之多窗口切换
Jan 23 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
python numpy库linspace相同间隔采样的实现
Feb 25 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 Python
Python必须了解的35个关键词
Jul 16 Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 Python
怎么用Python识别手势数字
Jun 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
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
2012/10/18 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
Python列表推导式的使用方法
2013/11/21 Python
python原始套接字编程示例分享
2014/02/21 Python
Python实现二叉堆
2016/02/03 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
python实现BackPropagation算法
2017/12/14 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
python Canny边缘检测算法的实现
2020/04/24 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
生物科学专业个人求职信范文
2013/12/05 职场文书
季度思想汇报
2014/01/01 职场文书
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
社会实践感言
2014/01/25 职场文书
周年庆典主持词
2014/04/02 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL