【Python】代码复用与函数递归

简介: 【Python】代码复用与函数递归

【Python】代码复用与函数递归

把代码当成一种资源,

代码资源化:程序代码是一种用来表达计算的资源;

代码抽象化:使用函数等方法对代码赋予更高级别的定义;

代码复用:同一份代码在需要时可以被重复使用。

       函数和对象是代码复用的两种表现形式,函数将代码命名,在代码层面建立了初步的抽象。


模块化设计:通过函数或对象封装将程序划分为模块及模块间的表达。具体包括:主程序,子程序和子程序之间的关系。

紧耦合:两个部分之间的交流很多,无法独立存在;

松耦合:两个部分之间交流较少,可以独立存在。

       模块内部紧耦合,模块之间松耦合。

函数递归

       函数递归不仅仅在程序中,数学中也学习过,递归中有两个关键的特征:链条和基例。

基例就是最基础的那个条件;

链条是n和n-1之间满足的条件。


数学归纳法

证明当n取第一个值n(0)时命题成立,

假设当n(k)时命题成立,证明当n=n(k+1)命题也成立,

递归是数学归纳法思维的编程体验。

看下例子:

image.png

看代码:

image.png

       递归本身就是一个函数,需要用函数定义方式描述,函数内部需要区分哪些是基例哪些是链条,基例和链条分别对应代码。

n=5,fact(5)=5*fact(4)

这时计算机会分配内存去计算fact(4)

然后一直往下 fact(3) 、fact(2)、 fact(1)

fact(1)=1*fact(0)

fact(0)=1

然后结果不断的返回 得到fact(5)。

       根据函数的定义,我们可以把定义理解为模板。计算机在进行运算时,会对模板进行循环往复的运算。


函数递归实例解析

       字符串的反转,将字符串S反转后输出,之前学习过字符串的切片,s[::-1]可以实现字符串的反转。意思是采用-1的步长进行输出。看递归的实现,函数+分支结构,区分递归链条和递归基例。

image.png

很简单吧,再看一个例子,斐波那契数列

F(1)=1

F(2)=1

F(3)=F(1)+F(2)

F(n)=F(n-1)+F(n-2)

看程序:

image.png

       再看一个稍微复杂的实例,汉诺塔问题 。汉诺塔指的是。。。(槽,自己去搜)。

       A B C 代表三个柱子   汉诺塔默认在A柱子上。

image.png

从A搬到C,小圆盘一直在大圆盘上面。

image.png

       n代表层数,上面是四层汉诺塔的解决问题。scr是源柱子,dst是目标柱子,mid是中间柱子。

目录
相关文章
|
4天前
|
Python
python函数进阶
python函数进阶
|
3天前
|
安全 Python
Python量化炒股的获取数据函数—get_industry()
Python量化炒股的获取数据函数—get_industry()
10 3
|
4天前
|
Python
Python sorted() 函数和sort()函数对比分析
Python sorted() 函数和sort()函数对比分析
|
3天前
|
Python
Python量化炒股的获取数据函数—get_security_info()
Python量化炒股的获取数据函数—get_security_info()
10 1
|
6天前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
12 1
|
6天前
|
调度 Python
揭秘Python并发编程核心:深入理解协程与异步函数的工作原理
在Python异步编程领域,协程与异步函数成为处理并发任务的关键工具。协程(微线程)比操作系统线程更轻量级,通过`async def`定义并在遇到`await`表达式时暂停执行。异步函数利用`await`实现任务间的切换。事件循环作为异步编程的核心,负责调度任务;`asyncio`库提供了事件循环的管理。Future对象则优雅地处理异步结果。掌握这些概念,可使代码更高效、简洁且易于维护。
10 1
|
11天前
|
Python
[oeasy]python035_根据序号得到字符_chr函数_字符_character_
本文介绍了Python中的`ord()`和`chr()`函数。`ord()`函数通过字符找到对应的序号,而`chr()`函数则根据序号找到对应的字符。两者互为逆运算,可以相互转换。文章还探讨了单双引号在字符串中的作用,并解释了中文字符和emoji也有对应的序号。最后总结了`ord()`和`chr()`函数的特点,并提供了学习资源链接。
16 4
|
14天前
|
Java Python
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
【9月更文挑战第18天】在 Python 中,虽无明确的 `interface` 关键字,但可通过约定实现类似功能。接口主要规定了需实现的方法,不提供具体实现。抽象基类(ABC)则通过 `@abstractmethod` 装饰器定义抽象方法,子类必须实现这些方法。使用抽象基类可使继承结构更清晰、规范,并确保子类遵循指定的方法实现。然而,其使用应根据实际需求决定,避免过度设计导致代码复杂。
|
16天前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
16天前
|
设计模式 缓存 开发者
探索Python中的装饰器:提升代码复用性的利器
本文深入探讨了Python中强大的装饰器功能,揭示了其如何通过元编程和闭包等技术手段,优雅地实现代码的复用与扩展。从基本概念到高级应用,我们将一步步揭开装饰器背后的奥秘,并通过实例展示其在实际项目开发中的巨大价值。无论是想要简化函数调用流程、增强函数功能,还是实现AOP(面向切面编程),掌握装饰器都是每位Python开发者必备的技能。
下一篇
无影云桌面