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网页请求urllib2模块简单封装代码
Feb 07 Python
python计算书页码的统计数字问题实例
Sep 26 Python
解析Python中的二进制位运算符
May 13 Python
Python中super关键字用法实例分析
May 28 Python
聊聊Python中的pypy
Jan 12 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
python实现多层感知器
Jan 18 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
Python第三方库的几种安装方式(小结)
Apr 03 Python
如何在pycharm中安装第三方包
Oct 27 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 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脚本的10个技巧(5)
2006/10/09 PHP
基于mysql的论坛(2)
2006/10/09 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
PHPStorm中如何对nodejs项目进行单元测试详解
2019/02/28 NodeJs
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
python实现感知器
2017/12/19 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
python实现控制COM口的示例
2019/07/03 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
国际贸易专业推荐信
2013/11/15 职场文书
制药工程专业毕业生推荐信
2013/12/24 职场文书
教师辞职报告范文
2014/01/20 职场文书
五一劳动节活动记录
2014/03/23 职场文书
学生保证书范文
2014/04/28 职场文书
3的组成教学反思
2014/04/30 职场文书
个人收入证明模板
2014/09/18 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
电气工程师岗位职责
2015/02/12 职场文书
2015年教学工作总结
2015/04/02 职场文书