1. 基础 :编写函数cal_factorial(n)计算阶乘(循环实现)。
def cal_factorial(n):
"""
计算n的阶乘(循环实现)
:param n: 非负整数
:return: n的阶乘
"""
if n < 0:
return None
result = 1
for i in range(1, n+1):
result *= i
return result
# 测试
print(cal_factorial(5)) # 输出: 120
print(cal_factorial(0)) # 输出: 1
运行结果:
2. 进阶 :用递归实现斐波那契数列(考虑添加缓存优化)。
from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
"""
递归实现斐波那契数列(带缓存优化)
:param n: 非负整数
:return: 第n个斐波那契数
"""
if n < 0:
return None
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
# 测试
print(fibonacci(10)) # 输出: 55
print(fibonacci(20)) # 输出: 6765
运行结果:
3. 拓展 :科赫曲线正向、反向绘制,加入绘制速度、绘制颜色等额外功能
import turtle
import time
def koch_curve(t, length, depth, color='blue', speed=1):
"""
绘制科赫曲线
:param t: turtle对象
:param length: 线段长度
:param depth: 递归深度
:param color: 绘制颜色
:param speed: 绘制速度(1-10)
"""
t.speed(speed)
t.color(color)
if depth == 0:
t.forward(length)
else:
length /= 3.0
koch_curve(t, length, depth - 1, color, speed)
t.left(60)
koch_curve(t, length, depth - 1, color, speed)
t.right(120)
koch_curve(t, length, depth - 1, color, speed)
t.left(60)
koch_curve(t, length, depth - 1, color, speed)
def draw_koch_snowflake():
"""绘制科赫雪花"""
screen = turtle.Screen()
screen.title("科赫雪花")
t = turtle.Turtle()
t.penup()
t.goto(-150, 90)
t.pendown()
# 正向绘制
start_time = time.time()
for _ in range(3):
koch_curve(t, 300, 3, 'blue', 5)
t.right(120)
end_time = time.time()
print(f"正向绘制时间: {end_time - start_time:.2f}秒")
# 反向绘制
t.penup()
t.goto(150, -90)
t.pendown()
t.setheading(180) # 设置朝向为左
start_time = time.time()
for _ in range(3):
koch_curve(t, 300, 3, 'red', 5)
t.left(120)
end_time = time.time()
print(f"反向绘制时间: {end_time - start_time:.2f}秒")
t.hideturtle()
screen.mainloop()
# 运行绘制
draw_koch_snowflake()
运行结果: