博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3之递归函数简单示例
阅读量:7089 次
发布时间:2019-06-28

本文共 1133 字,大约阅读时间需要 3 分钟。

概述

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

递归求和

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

你可能感兴趣的文章
HTTP 返回码中 301 与 302 的区别
查看>>
App自动化测试探索(二)MAC环境搭建iOS+Python+Appium测试环境
查看>>
使用MATPLOTLIB 制图(散点图,热力图)
查看>>
《深入PHP:面向对象、模式与实践》(一)
查看>>
[06] JavaScript 类型
查看>>
求最大值及其下标
查看>>
关于类型“LinkButton”的控件“xxx”必须放在具有 runat=server 的窗体标记内问题的解决方案...
查看>>
Javascript:DOM表格操作
查看>>
解决WCF传输大数据量时出错并提示:远程主机强迫关闭了一个现有的连接
查看>>
蓝桥杯-波动数列
查看>>
图片理论基础
查看>>
HDU4300 Clairewd’s message
查看>>
07.设计模式_适配器模式
查看>>
Unity Shader入门精要学习笔记 - 第10章 高级纹理
查看>>
2012.02.09(如何在Linux的Qt中,在while中按键退出)
查看>>
web基础
查看>>
VMware Workstation ubuntu 扩容
查看>>
JavaScript中使用构造器创建对象无需new的情况
查看>>
使用EasyUI,关于日期格式的文本框按照正常方式获取不到值的问题
查看>>
Struts2中的OGNL
查看>>