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使用函数默认值实现函数静态变量的方法
Aug 18 Python
跟老齐学Python之玩转字符串(3)
Sep 14 Python
Python随机生成彩票号码的方法
Mar 05 Python
在Python中操作字典之fromkeys()方法的使用
May 21 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
python tensorflow基于cnn实现手写数字识别
Jan 01 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
基于Python实现拆分和合并GIF动态图
Oct 22 Python
pycharm设置默认的UTF-8编码模式的方法详解
Jun 01 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 Python
基于 Python 实践感知器分类算法
Jan 07 Python
python 通过使用Yolact训练数据集
Apr 06 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的ob_start来生成静态页面的方法分析
2011/03/09 PHP
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
基于jquery & json的省市区联动代码
2012/06/26 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
python读取和保存图片5种方法对比
2018/09/12 Python
python调用java的jar包方法
2018/12/15 Python
python占位符输入方式实例
2019/05/27 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
什么是python的自省
2020/06/21 Python
python3.4中清屏的处理方法
2020/07/06 Python
CSS3 简写animation
2012/05/10 HTML / CSS
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python
app场景下uniapp的扫码记录
2022/07/23 Java/Android