递归 | Python从入门到精通:高阶篇之十一

简介: 递归是解决问题的一种方式,它和循环很像。递归的整体思想是,将一个大问题分解为一个个的小问题,直到问题无法分解时,再去解决问题。

点击查看上一节:命名空间

递归

首先来看一个例子:求一个数字的阶乘。
什么是阶乘?

用数字说明:
1! = 1
2! = 1*2 = 2
3! = 1*2*3 = 6
4! = 1*2*3*4 = 24

接下来联系一个例子,10!。
1、直接相乘

#最笨的方法,老老实实的从1相乘到10
print(1*2*3*4*5*6*7*8*9*10)

但是这个显然是不方便的,如果是求到100!,1000!。。。呢?

2、用循环求阶乘

# 创建一个变量保存结果
n = 10
for i in range(1,10):
    n *= i
print(n)

结果为:
image.png
显然也是正确的。

3、创建一个函数,可以用来求任意数的阶乘
语法结构:

参数:

        n 为要求阶乘的数字

代码显示:

def factorial(n):
    # 创建一个变量,来保存结果
    result = n
    
    for i in range(1,n):
        result *= i

    return result    
# 求10的阶乘    
print(factorial(10)) #调用函数即可,并赋予一个参数

执行结果为:
image.png
而且此时只需要修改需要求阶乘的数字即可,就会调用函数来求不同数字的阶乘了。

递归的概念

递归就是一个递归式的函数,而且递归不是Python独有的,其他语言里面也会有。

小故事:
从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么故事呢?
从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么故事呢?....
这个故事就可以无限的循环下去了。。这就是递归的一种形式。

那么递归简单理解就是自己去引用自己!
递归式函数,就是在函数中自己调用自己!
无穷递归:如果这个函数被调用,程序的内存会溢出,效果类似于死循环。如下展示:

def fn():
    fn()
fn()

会造成系统的崩溃,不要随便写这种函数。

概念

递归是解决问题的一种方式,它和循环很像,它的整体思想是,将一个大问题分解为一个个的小问题,直到问题无法分解时,再去解决问题。

递归式函数的两个要件

1.基线条件:问题可以被分解为的最小问题,当满足基线条件时,递归就不在执行了
2.递归条件:将问题继续分解的条件

递归和循环

用10!来展示一下递归:

10! = 10 * 9!
9! = 9 * 8!
8! = 8 * 7!
 ...
1! = 1

递归的方式:

def factorial(n):
    # 基线条件 判断n是否为1,如果为1则此时不能再继续递归
    if n == 1 :
        # 1的阶乘就是1,直接返回1
        return 1
    # 递归条件    
    return n * factorial(n-1)
print(factorial(10))

执行结果为:
image.png
之前的课程中我们也讲过循环的写法,两者基本是类似的,可以互相替换,但是循环编写起来比较容易,阅读起来稍难;递归编写起来难,但是方便阅读。

练习
1、创建一个函数 power 来为任意数字做幂运算 n ** i
2、创建一个函数,用来检查一个任意的字符串是否是回文字符串,如果是返回True,否则返回False。
回文字符串,字符串从前往后念和从后往前念是一样的。

点击学习配套视频课程

获取更多内容请订阅Python学习站官方技术圈!

相关文章
|
6月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
732 7
|
7月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
513 1
|
8月前
|
API 数据安全/隐私保护 开发者
Python自定义异常:从入门到实践的轻松指南
在Python开发中,自定义异常能提升错误处理的精准度与代码可维护性。本文通过银行系统、电商库存等实例,详解如何创建和使用自定义异常,涵盖异常基础、进阶技巧、最佳实践与真实场景应用,助你写出更专业、易调试的代码。
305 0
|
8月前
|
IDE 开发工具 数据安全/隐私保护
Python循环嵌套:从入门到实战的完整指南
循环嵌套是Python中处理多维数据和复杂逻辑的重要工具。本文通过实例讲解嵌套循环的基本用法、常见组合、性能优化技巧及实战应用,帮助开发者掌握其核心思想,避免常见错误,并探索替代方案与进阶方向。
572 0
|
6月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
1217 1
Python API接口实战指南:从入门到精通
|
6月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
1091 1
|
10月前
|
Python
Python字符串格式化利器:f-strings入门指南
Python字符串格式化利器:f-strings入门指南
530 80
|
7月前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
394 5
|
7月前
|
数据采集 存储 XML
Python爬虫入门(1)
在互联网时代,数据成为宝贵资源,Python凭借简洁语法和丰富库支持,成为编写网络爬虫的首选。本文介绍Python爬虫基础,涵盖请求发送、内容解析、数据存储等核心环节,并提供环境配置及实战示例,助你快速入门并掌握数据抓取技巧。

推荐镜像

更多