实验 3 函数与代码复用(2 学时)
目的:理解函数封装与递归思想
实验任务:
1. 基础 :编写函数 cal_factorial(n)计算阶乘(循环实现)。
完整代码
def cal_factorial(n):
"""计算n的阶乘(循环实现)"""
if n < 0:
raise ValueError("n必须为非负整数")
result = 1
for i in range(1, n + 1):
result *= i
return result
a=input("输入一个正整数")
"""输出结果"""
print(cal_factorial(int(a)))
运行结果

2. 进阶 :用递归实现斐波那契数列(考虑添加缓存优化)。
完整代码
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
"""递归计算斐波那契数列(带缓存优化)"""
if n < 0:
raise ValueError("n必须为非负整数")
if n <= 1:
return n
return fib(n - 1) + fib(n - 2)
a=input("输入一个正整数\n")
"""输出结果"""
print(fib(int(a)))
运行结果

3. 拓展 :科赫曲线正向、反向绘制,加入绘制速度、绘制颜色等额外 功能 提示 :递归函数需注意终止条件,避免栈溢出
完整代码
import turtle
def draw_koch_curve(t, length, depth, is_forward=True, color='black', speed=0):
"""
绘制科赫曲线(支持正反向)
参数:
t: turtle对象
length: 线段长度
depth: 递归深度
is_forward: 是否绘制正向曲线
color: 绘制颜色
speed: 绘制速度(0-最快,1-慢速,...,10-最慢)
"""
t.color(color)
t.speed(speed)
def forward_koch(t, l, d):
if d == 0:
t.forward(l)
else:
forward_koch(t, l / 3, d - 1)
t.left(60)
forward_koch(t, l / 3, d - 1)
t.right(120)
forward_koch(t, l / 3, d - 1)
t.left(60)
forward_koch(t, l / 3, d - 1)
def reverse_koch(t, l, d):
if d == 0:
t.forward(l)
else:
reverse_koch(t, l / 3, d - 1)
t.right(60)
reverse_koch(t, l / 3, d - 1)
t.left(120)
reverse_koch(t, l / 3, d - 1)
t.right(60)
reverse_koch(t, l / 3, d - 1)
if is_forward:
forward_koch(t, length, depth)
else:
reverse_koch(t, length, depth)
def main():
"""示例主程序"""
screen = turtle.Screen()
screen.title("科赫曲线绘制")
screen.bgcolor("white")
t = turtle.Turtle()
t.penup()
t.goto(-200, 100)
t.pendown()
# 绘制正向蓝色科赫曲线
draw_koch_curve(t, 400, 3, True, 'blue', 0)
# 移动位置绘制反向红色科赫曲线
t.penup()
t.goto(-200, -100)
t.pendown()
draw_koch_curve(t, 400, 3, False, 'red', 0)
screen.exitonclick()
if __name__ == "__main__":
main()
运行结果


被折叠的 条评论
为什么被折叠?



