Python初学10——代码复用与函数递归

目录

一、代码复用与模块化设计

二、函数递归的理解(基例、链条)

三、函数递归的调用过程(函数、分支)

四、函数递归举例

4.1 字符串反转

4.2 斐波那契数列

4.3 汉诺塔

五、“科赫雪花”实例

5.1 绘制“科赫曲线”

5.2 “科赫曲线”绘制“科赫雪花”


一、代码复用与模块化设计

代码复用的抽象:

  • 函数:将代码命名,在代码层面建立了初步的抽象
  • 对象:具有属性和方法,如<a>.<b>和<a>.<b>(),在函数之上再次组织进行抽象

代码的模块化:

  • 紧耦合:两个部分之间交流很多,无法独立存在
  • 松耦合:两个部分之间交流较少,可以独立存在
  • 模块内部紧耦合,模块之间松耦合

二、函数递归的理解(基例、链条)

函数递归:函数调用自身的方式。

比如:n! = \left\{\begin{matrix} 1 & & n=0 \\ n(n-1)! & & otherwise \end{matrix}\right.

存在两个特点:

  • 链条:计算过程存在递归链条
  • 基例:存在一个或多个不需要再次递归的基础实例

三、函数递归的调用过程(函数、分支)

计算n!

图3-1

递归实现:(函数+分支)

  • 递归本身是一个函数,需要定义一个函数
  • 函数内部采用分支语句对输入参数判断
  • 链条和基例,要分别编写对应代码

四、函数递归举例

4.1 字符串反转

目标:将字符串s反转后输出。

  1. 可以用字符串切片的方法:s[::-1],实现对字符串s的反转输出。字符串切片方法参考“Python初学4”第一章第3节。
  2. 用函数递归实现:
图4-1

4.2 斐波那契数列

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

F(n) = \left\{\begin{matrix} 1 & & n=1 \\ 1 & & n=2 \\ F(n-1) + F(n-2) & & otherwise \end{matrix}\right.

图4-2

4.3 汉诺塔

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

图4-3
图4-4

五、“科赫雪花”实例

5.1 绘制“科赫曲线”

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

图5-1
图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)

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-3

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()
图5-4

总结:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

觅道無涯-千知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值