代码复用与模块化设计
代码复用
所谓的代码复用就是将代码当成资源进行抽象。
代码资源化
代码资源化意思是程序代码是一种用来表达计算的“资源”;
代码抽象化
代码抽象化意思是使用函数等方法对代码赋予更高级别的定义;
代码复用
复用意思是同一份代码在需要是可以被重复使用。
函数和对象是代码复用的两种主要形式
函数:将代码命名在代码层面建立了初步抽象;
对象:属性和方法,在函数之上再次组织进行抽象。
模块化设计
模块化设计的思想就是分而治之,通过函数或者对象进行封装程序并将程序划分为模块及模块间的表达。具体就是主程序,子程序和子程序间的关系。分而治之,一种分而治之,分层抽象,体系化的设计思想。
模块化设计包括紧耦合和松耦合,紧耦合就是两个部分之间交流很多并且无法独立存在,松耦合就是两个部分之间交流较少可以独立存在,模块内部紧耦合,模块之间松耦合。
函数递归的理解
所谓函数递归就是在编程语言中,直接或者间接调用函数本身的方式。包括两个关键特征,链条和基例
链条:在工业上意思是一般为金属链环或者环形物,多用机械传动 ,牵引。用来障碍交通通道的链形物。而在编程中就是计算过程中存在递归链条。
基例:存在一个或者多个不需要再次递归的基例。
数学归纳法就是证明当n却第一个值n0时命题成立,假设当nk时命题成立,证明当n=n(k+1)时命题也成立,递归是数学归纳法思维的编程体现。
函数递归的调用过程
递归的实现
n!={ 1 n=0
n(n-1)! n>0
def fact(n):
if n==0:
return 1
else :
return n*fact(n-1)
函数+分支语句
递归本身是一个函数,需要函数定义方式描述;函数内部,采用分支结构语句对输入参数进行判断;基例和链条,分别编写对应代码。
函数递归实例解析
斐波那契数列
F(n-1) = F(n-1) + F(n-2)
def f(n): #函数 + 分支结构
if n == 1 or n == 2: #递归链条
return 1
else : #递归基例
return f(n-1) + f(n-2)
汉诺塔
count = 0
def hanluota(n,str,dst,mid):
global count
if n == 1: #函数+分支结构
print("{}:{}-->{}".format(1,str,dst))
count += 1 #递归链条
else :
hanluota(n-1,str,mid,dst) #递归基例
print("{}:{}-->{}".format(n,str,dst))
count += 1
hanluota(n-1,str,mid,dst)
递归很简单,无非就是一个函数调用自己而已
《盗墓空间》嘛,本质上就是递归。
如果没看过那这个故事你一定听过,“从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事。。。”