Python3基础教程之递归函数简单示例

作者:若数 时间:2022-07-19 17:19:16 

概述

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

递归求和

我们可以利用递归函数实现一个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

这种处理方式看似复杂,我们可能更多会利用循环语句替代,但是使用递归函数逻辑简单清晰,这是使用的一大优点。

来源:https://juejin.im/post/5cf8eb9351882570ad24ca0a

标签:python3,递归,函数
0
投稿

猜你喜欢

  • PHP简易延时队列的实现流程详解

    2023-05-29 23:02:48
  • 微信小程序实现图片上传、删除和预览功能的方法

    2023-09-20 08:54:30
  • python文件选择对话框的操作方法

    2023-08-02 16:27:21
  • 一个表单焦点效果函数

    2008-01-19 10:59:00
  • SQL Server数据库触发器安全隐患解析

    2009-03-25 12:56:00
  • Python10行代码实现模拟百度搜索的示例

    2022-07-19 17:10:57
  • 白鸦:界面烂还是界面设计烂?

    2008-04-03 16:05:00
  • Go Gin实现文件上传下载的示例代码

    2023-06-21 15:11:13
  • 基于go微服务效率工具goctl深度解析

    2023-07-12 03:57:13
  • 网页屏蔽鼠标左右键和键盘按键功能

    2007-10-17 21:30:00
  • pycharm进入时每次都是insert模式的解决方式

    2023-08-09 09:52:16
  • 高效的MySQL分页

    2011-01-04 20:01:00
  • golang组件swagger生成接口文档实践示例

    2023-09-19 11:29:39
  • asp 在线备份与恢复sql server数据库的代码

    2010-07-31 18:52:00
  • Python环境下安装使用异步任务队列包Celery的基础教程

    2023-08-23 23:06:48
  • python之tensorflow手把手实例讲解斑马线识别实现

    2021-11-11 05:53:19
  • Javascript调用XML制作连动下拉框

    2007-09-17 12:55:00
  • python Django连接MySQL数据库做增删改查

    2023-11-14 10:44:35
  • 谈谈网页一屏有多大?

    2007-12-21 12:28:00
  • mysql 插入优化

    2010-12-14 15:29:00
  • asp之家 网络编程 m.aspxhome.com