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 相关文章推荐
Django中使用group_by的方法
May 26 Python
django 修改server端口号的方法
May 14 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
opencv实现图片模糊和锐化操作
Nov 19 Python
python读取txt文件中特定位置字符的方法
Dec 24 Python
python字典的常用方法总结
Jul 31 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 Python
Python 文件数据读写的具体实现
Jan 24 Python
python调用API接口实现登陆短信验证
May 10 Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 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
解决File size limit exceeded 错误的方法
2013/06/14 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
Node.js中require的工作原理浅析
2014/06/24 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
简单使用Python自动生成文章
2014/12/25 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
python数据结构之链表详解
2017/09/12 Python
python列表使用实现名字管理系统
2019/01/30 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
Lookfantastic葡萄牙官方网站:欧洲第一大化妆品零售商
2018/03/17 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
售后服务经理岗位职责
2014/02/25 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
情况说明书格式及范文
2019/06/24 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL