代码复用与函数递归
-------------------------
代码复用:
将代码当成资源进行抽象
-代码资源化:程序代码是一种用来表达计算的“资源”
-代码抽象化:使用函数等方法对代码赋予更高级别的定义。
代码复用:同一份代码在需要时可以被重复使用。
一般, 我们使用函数与对象进行代码复用,函数与对象是对代码复用的不同级别。
函数:将代码命名 对象:属性与方法
在代码层面建立了初步抽象 <a>.<b>和<a>.<b>()
在函数之上再次组织进行抽象
在代码复用的基础上,程序员可以展开模块化设计。
分而治之
-通过函数或对象封装将程序划分为模块与模块间的表达。
-具体包括:主程序、子程序与子程序间的关系。
-分而治之:一种分而治之、分层抽象、体系化的设计思想。
紧耦合:两个部分之间交流很多,无法独立存在。
松耦合:两个部分之间交流很少,可以独立存在。
尽量做到函数内部紧耦合,函数之间松耦合。
函数递归
函数递归有两个关键特征:
基例:存在一个或多个不需要再次递归的基例
链条:计算过程存在递归链条。
实现n!
def fact(n):
if n==1:
return n
else:
return n*fact(n-1)
递归的实现:
函数+分支语句
-递归本身是一个函数,需要用函数方式描述。
-函数内部,采用分支语句对输入参数进行判断。
-基例与链条,分别编写对应代码
将字符串s反转
def rvs(s):
if s=“ ”:
return s
else:
return rev(s[1:])+s[0]
斐波那契数列:
def f(n):
if n=1 or n=2:
return 1
else
return f(n-2)+f(n-1)
汉诺塔:
count=0
def hanoi(n,src,dst,mid):
global count
if n==1:
print("{}:{}->{}".format(1,src,dst))
count+=1
else:
hanoi(n-1,src,mid,dst)
print("{}:{}->{}".format(n,src,dst))
count+=1
hanoi(n-1,mid,dst,src)