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 map和reduce函数用法示例
Feb 26 Python
python判断字符串编码的简单实现方法(使用chardet)
Jul 01 Python
如何用itertools解决无序排列组合的问题
May 18 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
pycharm运行和调试不显示结果的解决方法
Nov 30 Python
python3实现带多张图片、附件的邮件发送
Aug 10 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 Python
python读取csv文件指定行的2种方法详解
Feb 13 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
利用python绘制中国地图(含省界、河流等)
Sep 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截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
Python实现选择排序
2017/06/04 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
python制作朋友圈九宫格图片
2019/11/03 Python
python多进程使用函数封装实例
2020/05/02 Python
基于keras中的回调函数用法说明
2020/06/17 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
人力资源经理自我评价
2014/01/04 职场文书
秋季运动会加油稿200字
2014/01/11 职场文书
2014新年寄语
2014/01/20 职场文书
六一节目主持词
2014/04/01 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
跑出一片天观后感
2015/06/08 职场文书
合作意向书怎么写
2019/06/24 职场文书