目录
一、代码复用与模块化设计
代码复用的抽象:
- 函数:将代码命名,在代码层面建立了初步的抽象
- 对象:具有属性和方法,如<a>.<b>和<a>.<b>(),在函数之上再次组织进行抽象
代码的模块化:
- 紧耦合:两个部分之间交流很多,无法独立存在
- 松耦合:两个部分之间交流较少,可以独立存在
- 模块内部紧耦合,模块之间松耦合
二、函数递归的理解(基例、链条)
函数递归:函数调用自身的方式。
比如:
存在两个特点:
- 链条:计算过程存在递归链条
- 基例:存在一个或多个不需要再次递归的基础实例
三、函数递归的调用过程(函数、分支)
计算n!

递归实现:(函数+分支)
- 递归本身是一个函数,需要定义一个函数
- 函数内部采用分支语句对输入参数判断
- 链条和基例,要分别编写对应代码
四、函数递归举例
4.1 字符串反转
目标:将字符串s反转后输出。
- 可以用字符串切片的方法:s[::-1],实现对字符串s的反转输出。字符串切片方法参考“Python初学4”第一章第3节。
- 用函数递归实现:

4.2 斐波那契数列
目标:代码实现斐波那契数列。

4.3 汉诺塔
目标:代码实现汉诺塔问题。


五、“科赫雪花”实例
5.1 绘制“科赫曲线”
“科赫曲线”绘制过程:一条线段平均分三段,中间一段变成一个60度的凸起。


import turtle
'''
功能: 绘制“科赫曲线”
参数: size:初始线段的长度
level:“科赫曲线”的阶数
返回值:无
'''
def koch(size, level):
if level == 0:
turtle.forward(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size/3, level-1)
def main():
turtle.setup(800,400) # 设置画布大小
turtle.penup() # 抬起画笔
turtle.goto(-300,-50) # 设置画笔位置
turtle.pendown() # 落下画笔
turtle.pensize(2) # 设置画笔粗细
koch(600,3) # 绘制“科赫曲线”
turtle.hideturtle() # 隐藏画笔
turtle.done() # 保留显示窗口
main()

5.2 “科赫曲线”绘制“科赫雪花”
import turtle
'''
功能: 绘制“科赫曲线”
参数: size:初始线段的长度
level:“科赫曲线”的阶数
返回值:无
'''
def koch(size, level):
if level == 0:
turtle.forward(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size/3, level-1)
'''
功能: 使用等边三角形框架绘制“科赫雪花”
参数: size:初始线段的长度
level:“科赫曲线”的阶数
返回值:无
'''
def kocher(size, level):
for angle in [60, -120, -120]:
turtle.left(angle)
koch(size, level)
def main():
turtle.setup(800,600) # 设置画布大小
turtle.penup() # 抬起画笔
turtle.goto(-500,-50) # 设置画笔位置
turtle.pendown() # 落下画笔
turtle.pensize(2) # 设置画笔粗细
kocher(400, 5) # 绘制“科赫雪花”
turtle.hideturtle() # 隐藏画笔
turtle.done() # 保留显示窗口
main()

总结:
- 深入理解函数递归
- 修改“科赫曲线”形状、旋转角度
- 修改“科赫雪花”的基础框架图形
- 其他分形几何:康托尔集、谢尔宾斯基三角形、门格海绵、龙形曲线、空间填充曲线……