代码复用和函数递归 python
1、代码复用 把代码当成资源进行抽象,函数 和 对象 是代码复用的两种主要形式
函数:将代码命名在代码层面建立了初步抽象
对象:属性和方法 <a>.<b>和<a>.<b>()在函数之上再次组织进行抽象
函数 ——————————————————> 对象
抽象级别
2、模块化设计
-紧耦合:两个部分之间交流很多,无法独立存在
-松耦合:两个部分之间交流较少,可以独立存在
-模块内部紧耦合,模块之间松耦合
3、函数的递归
(1)递归的定义
-函数定义中调用函数自身的方法
-两个关键特征:链条:计算过程存在递归链条
基例:存在一个或多个不需要再次递归的基例
-类似数学归纳法 递归时数学归纳法思维的编程体现
证明当n取第一个值时命题成立
假设当时命题成立,证明当n=时命题也成立
(2)递归的实现
例:n!
n=0时,n! = 1
otherwise,n! = n(n-1)!
def fact(n):
if n == 0:
return 1
else:
return n*fact(n-1)
函数+分支语句
-递归本身是一个函数,需要函数定义方式描述
-函数内部,采用分支语句对输入参数进行判断
基例和链条,分别编写对应代码
(3)函数递归实例分析
-函数 + 分支结构、递归链条、递归基例
——字符串反转 将字符串s反转后输出
def rvs(s):
if s =="":
return s
else:
return rvs(s[1:])+s[0]
或: >>>s[::-1]
——斐波那契数列 F(n)=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 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)
hanoi(3,"A","C","B")
print(count)
运行结果:
1:A->C
2:A->B
1:C->B
3:A->C
1:B->A
2:B->C
1:A->C
7