Python学习教程(Python学习路线):Python3之递归函数简单示例

概述

递归函数即直接或间接调用自身的函数,且递归过程中必须有一个明确的递归结束条件,称为递归出口。递归极其强大一点就是能够遍历任意的,不可预知的程序的结构,比如遍历复杂的嵌套列表。

递归求和

我们可以利用递归函数实现一个Python内置函数sum()的递归版。

# 递归
def d_sum(L):if not L:return 0else:return L[0] + d_sum(L[1:])
sum_l = d_sum(range(10))
print(sum_l)
复制代码

示例结果

45
复制代码

该递归函数怎么实现列表元素相加的呢? 我们知道函数是有本地作用域的,对函数调用的每一个打开的时候,在运行时调用堆栈上都有自己的一个本地作用域的副本,即L在每个层级都是不同的,比如我们可以通过每次调用时添加一个打印语句,更加直观展示每个层级L的情况

# 递归
def d_sum(L):# 打印该层级Lprint(L)if not L:return 0else: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 = 0for x in L:if not isinstance(x, list):tot += xelse: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学习路线会继续为大家分享!

转载于:https://juejin.im/post/5cfe08b5f265da1b5e72e844

Python学习教程(Python学习路线):Python3之递归函数简单示例相关推荐

  1. 2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?

    2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?编程界的王者是渐落寞的Java还是大火的Python? 是不是你们也喜 ...

  2. 软件测试python基础_软件测试学习教程——python基础

    原标题:软件测试学习教程--python基础 一,print()函数 print 作用:把" "内部的内容,输出到屏幕. print("hello world" ...

  3. python 在线教程-python在线学习

    https://www.runoob.com/python/python-tutorial.html Python 基础教程 Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言. P ...

  4. python3简明教程第二版答案_python入门简明教程?求最新的python简明教程,最好是python3的...

    本人对于计算机没有任何基础,只是简单的操作.过两天要学习python语言的基础课,需要如何准备.跪谢! 先看python的简明教程,然后可以再看<dive into python>中文版( ...

  5. python语言教程-Python 基础教程

    Python基础教程 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像Pe ...

  6. python小老鼠编程_成都python函数学习教程,Python编写课程

    1.urllib2/urllib实现urllib2和urllib是Python中的两个内置模块,要实现HTTP功能,实现方式是以urllib2为主,urllib为辅.1.1首先实现一个完整的请求与响应 ...

  7. python自学教程-Python学习教程(一)自学资源分享

    在我看来,基本上可以不负责任地认为,Python 可以做任何事情.无论是从入门级选手到专业级选手都在做的爬虫,还是Web 程序开发.桌面程序开发还是科学计算.图像处理,Python都可以胜任. 或许是 ...

  8. python后端教程_Python学习教程(技术干货):关于前后端分离开发入门

    原标题:Python学习教程(技术干货):关于前后端分离开发入门 对于程序员来说,其实Tab和空格远远不只是"立场"问题那么简单. 在不同的编辑器里tab的长度可能不一致,所以在一 ...

  9. 《Python基础教程》学习笔记——异常

    Python基础教程--异常 异常 异常是什么 让事情沿你指定的轨道出错 raise 语句 自定义的异常类 捕获异常 不用提供参数 多个 except 子句 一箭双雕 捕获对象 一网打尽 万事大吉时 ...

最新文章

  1. linux代码动态分析软件,举例分析Linux动态库和静态库
  2. Swift 3.0封装 URLSession 的GET/SET方法代替 Alamofire
  3. java 分析jstack日志_望闻问切使用jstack和jmap剖析java进程各种疑难杂症
  4. 干货丨三大特征选择策略,有效提升你的机器学习水准
  5. 各类web服务器 http access log获取用户和代理ip
  6. python学习之matplotlib绘制动图(FuncAnimation()参数)
  7. 深入分析python的and or 返回值
  8. easyui关机图标_如何在Windows 10中创建关机图标
  9. 【51单片机快速入门指南】4.3.3: MPU6050使用Mahony AHRS算法实现六轴姿态融合获取四元数、欧拉角
  10. 57、Design Support Library 介绍及环境搭建
  11. LINUX 下安装 jdk 问题(please use alien to install rpm packages on Debian )
  12. can通信中如何设置屏蔽验收码的总结
  13. 基于pytorch的sque2suqe with attention实现与介绍
  14. Web 开发项目的6个最佳Java框架
  15. PET图像的SUV计算
  16. KingBaseES 报错Connection to X.X.X.X:54321 refused.Check that the hostname and port are correct and ..
  17. python做股票系统_GitHub - Suking/stock: stock,股票系统。使用python进行开发。
  18. 2020职高计算机录取分数线,四川邮电职校2020单招录取分数线
  19. android xml msgid,Android挂逼修练之行–微信聊天消息修改器插件开发详解
  20. 基于MindSpore框架的室内场景图像分割方法研究

热门文章

  1. 对比less聊scss(1):scss特性
  2. C语言 · 矩阵乘法
  3. python学习:time、unixtime、string的转换
  4. SQL Server中一个隐性的IO性能杀手-Forwarded record
  5. 一、如何创建一个状态栏扩展(火狐插件扩展开发教程)
  6. VS.NET 2005 SP1 安装注意
  7. ROS学习(十三):time 和 Timer
  8. ESXi上的固态硬盘识别为非SSD
  9. 组策略 从入门到精通 (一) 组策略的还原与备份和汇入
  10. cmd系统命令不识别