服务器之家

服务器之家 > 正文

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

时间:2021-07-02 00:46     来源/作者:若数

概述

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

递归求和

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

?
1
2
3
4
5
6
7
8
9
# 递归
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的情况

?
1
2
3
4
5
6
7
8
9
10
11
12
# 递归
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

处理任意结构

比如我们可以利用递归计算一个嵌套的子列表结构中所有数字的总和

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部