玩转Python:深入理解递归函数的特性与实战应用实例
函数调用自身的编程技巧称为递归。
一、递归函数的特点
特点:
一个函数内部调用自己,函数内部可以调用其他函数,当然在函数内部也可以调用自己。
代码特点:
1. 函数内部的代码是相同的,只是针对参数不同,处理的结果不同
2. 当参数满足一个条件时,函数不再执行。这个非常重要,通常被称为递归的出口,否则会出现死循环
示例代码:
def sum_numbers(num):
print(num)
# 递归的出口很重要,否则会出现死循环
# 递归的出口:当参数满足一定条件时,不再执行函数
if num == 1:
return
# 自己调用自己
sum_numbers(num - 1)
sum_numbers(3)
执行结果:
上面代码执行过程示意图:
文字解释:
解释器执行到第一行代码发现是一个函数后继续向下,来到第13行调用函数,回到第一行代码,输出num此时是3,继续向下执行到判断语句不满足条件继续向下执行,来到第9行代码,调用函数此时参数是num-1=2,来到第1行代码输出num是2,继续向下执行到判断语句不满足条件继续向下执行,到第9行调用函数,此时参数是2-1=1,来到第1行输出num是1,继续向下执行此时满足条件,出现return后面的代码都不执行,然后返回到上一次调用函数时的代码,看调用函数下面有没代码,有就执行代码此时输出结果是完成2,继续返回到上一次调用函数位置此时输出结果是完成3,当代码全部执行完,回到最初第一次调用函数位置也就是第13行。
二、递归案例 - 计算数字累加
需求:
1. 定义一个函数 sum_numbers
2. 能够接收一个 num 的整数参数,
3. 计算1+2+...num的结果
示例代码:
def sum_numbers(num):
# 1. 出口
if num == 1:
return 1
# 2. 数字的累加num+(1...num - 1)
# 假设sum_numbers能够正确处理1...num-1
temp = sum_numbers(num - 1)
return num + temp
# result = sum_numbers(1)
result = sum_numbers(100)
print(result)
执行结果:
核心重点是这个部分:做了一个假设
以上执行流程示意图:
提示:递归是一个编程技巧,初次接触递归会感觉有些吃力,在处理不确定的循环条件时,格外的有用,例如遍历整个文件目录的结构。
以上就是对递归函数的相关介绍,后面开始介绍面向对象,这个也是编程语言中重要且难的知识点了,或许文字教程不会很通透但是也有Python视频教程在python自学网。
文章借鉴来源: python自学网 http://www.wakey.com.cn/
推荐阅读
-
玩转Python排序:深入理解sort与sorted函数的高级key参数用法
-
理解与实战:Python中的面向对象继承特性 - (概念解析、语法细节、优缺点、关键术语及注意事项、实例代码)
-
玩转Python:深入理解与应用基础的进制转换函数
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
C++编程:实战教程 - 实现栈与队列(Deque) 容器适配器,探讨Stack和Queue的实现及Queueue(Deque)的问题。深入理解:如何模拟实现Priority Queue (优先级队列) - 实例与练习。续集:仿函数在C++中的二次探索
-
玩转Python:深入理解递归函数的特性与实战应用实例
-
理解PHP基础:深入解析递归函数的工作原理与应用
-
深入理解C++ STL: priority_queue(优先级队列)的工作原理及仿函数的应用与实战讲解
-
玩转Kotlin性能测试:JMH入门指南一 - 测试基础" "深入理解JMH在Kotlin中的应用:基准测试实战解析" "轻松实践Kotlin基准测试:JMH工具详解与实例总结
-
玩转Python:深入理解进程与线程的区别与应用