Python-代码复用与函数递归

程序代码本身是一种用来表达计算的资源

把代码当做资源进行抽象
-代码资源化:程序代码是一种用来表达计算的“资源”
-代码抽象化:使用函数等方法对代码赋予更高级别的定义
-代码复用:同一份代码在需要时可以被重复使用

一般来说,使用函数或抽象来实现代码复用
函数和抽象是对代码抽象的不同级别

函数–级别较低,功能为将代码命名
-在代码层面建立了初步抽象

对象-级别较高,可以将一组变量,或者一组函数,进一步抽象
..()
在函数之上再次组织进行抽象

模块化设计
-模块化设计基于一种逻辑的设计思维------分而治之

分而治之
-通过函数或对象封装将程序划分为模块及模块间的表达
-具体包括:主程序、子程序和子程序间的关系
-分而治之:一种分而治之,分层抽象,体系化的设计思想

一般将主程序看做模块和模块之间的搭配,子程序看做一个模块

模块设计的基本概念
-紧耦合:两个部分交流很多,无法独立存在
-松耦合:两个部分之间交流很少,可以独立存在
-模块内部紧耦合,模块之间松耦合

一般编写程序时,通过函数将一段代码与代码的其他部分分开,对于函数的输入参数和返回值,就是这段函数与其他代码的交流通道
这样的通道越少越清晰,定义的函数的复用可能性就越高

函数递归的理解
-什么是函数递归:在函数定义中,调用函数自身的方式就是递归

递归特性
-链条:计算过程存在递归链条
-基例:存在一个或多个不需要再次递归的基例

函数递归的调用过程

如图所示,我们知道,在数学中,N的阶乘在N=0的时候等于1,N=其他数值时,它的值为n(n-1)的阶乘、

然后如果有人问什么是阶乘

阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是数学术语。
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。
亦即n!=1×2×3×…×(n-1)n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n

实现递归首先需要一个函数
所以定义一个函数,由于知道当n=0时,n的阶乘等于1,当n不等于0时,他的阶乘等于n(n-1)的阶乘
那么
def fact(n):
if n==0:
return 1
else:
return n*fact(n-1)

递归的实现:
函数+分支语句
-递归本身是一个函数,需要函数定义方式描述
-函数内部,采用分支语句对输入参数进行判断
-基例和链条,分别编写对应代码
在这里插入图片描述不懂得可以私聊我,虽然我也是问出来的 也同时感谢Bufny和MmToon工作室大佬的讲解
在计算时,因为n=5,所以跳过n0的判断,跳入n*fact(n-1)的计算,因为计算机无法识别n-1为多少,所以会创建一个新的内存块去计算他,这个时候又继续会计算n=4时的n-1为多少,以此类推,直到n-1=0时,中断这个循环,返回n0的结果,这个过程叫做递归

这一章其实比较烧脑,很多东西没有完全消化,不懂得可以私聊我,促进学习.

发布了10 篇原创文章 · 获赞 3 · 访问量 103

猜你喜欢

转载自blog.csdn.net/yinghua1234/article/details/105139692