- 代码复用和模块化设计
- 函数递归的理解
- 函数递归的条用过程
代码复用和函数递归能够极大的减少代码的编写
把代码当成资源进行抽象
-代码资源化: 程序代码是一种用来表达计算的资源
- 代码抽象化: 使用函数等方法对代码赋予更高级别的定义
- 代码复用: 同一份代码在需要使用时可以被重复使用
-- 代码复用的 实现,主要通过函数和对象这两种方式实现代码复用。
函数: 将代码命名在代码层面进行了初步抽象
对象: 属性和方法,<a>.<b> 和<a>.<b>() 在函数之上在此组织进行抽象
模块化设计
分而治之
- 通过函数或对象封装的思想将程序划分为模块及模块间的表达
- 主要包括:主程序,子程序和子程序间关系
- 分而治之: 一种分而治之,分层抽象,体系化的设计思想
模块化设计
两大理念
紧耦合和松耦合
-紧耦合: 两个部分之间交流很多,无法独立存在;
- 松耦合: 两个部分之间交流较少,可以独立存在
模块内部紧耦合,模块间以松耦合的形式进行组织
Python 中的递归分析
递归的概念,在函数使用的过程中,函数自身的方式就是递归,递归在数学里也广泛存在
阶乘的定义,就是一个很好的递归定义
递归中的两个关键特征
- 链条: 计算过程中存在递归链条,在阶乘的过程中的链条就是 n!=n*(n-1)!
- 基例:存在一个或多个不需要再次递归的基例 n=0 的时候,n!=1
递归也是数学归纳法在 程序思想中的基本体现
递归的实现
递归的过程
字符串反转的例子
def rvs(s):
if s =="":
return s
else:
return rvs(s[1:])+s[0] ##逐层递归
rvs("Education")
rvs("Febuary")
斐波那契数列的编程
def f(n):
if n==1 or n==2:
return 1
else:
return f(n-1)+f(n-2)
f(10)
汉诺塔问题
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-1,src,dst))
count+=1
hanoi(n-1,mid,dst,src)
hanoi(3,"A","B","C")
print(count)
PyInstaller 可以将源代码打包成可执行的文件
科赫雪花--科赫曲线,科赫曲线的模型
import turtle as tl
def kohe(size,n):
if n==0:
tl.fd(size)
else:
for angle in [0,60,-120,60]:
tl.left(angle)
kohe(size/3,n-1)
def main():
tl.setup(600,600)
tl.penup()
tl.goto(-200,100)
tl.pendown()
tl.pensize(2)
level=0
kohe(400,level)
tl.right(120)
kohe(400,level)
tl.right(120)
kohe(400,level)
tl.hideturtle()
main()
科赫小雪花扩展