实验3 函数与代码复用(2 学时)
目的:理解函数封装与递归思想
实验任务:
1. 基础 :编写函数cal_factorial(n)计算阶乘(循环实现)。
代码:
def cal_factorial(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
try:
num = int(input("请输入一个整数: "))
if num < 0:
print("输入的数必须是非负整数。")
else:
factorial = cal_factorial(num)
print(f"{num} 的阶乘是: {factorial}")
except ValueError:
print("输入无效,请输入一个有效的整数。")
实验结果截图:

2. 进阶 :用递归实现斐波那契数列(考虑添加缓存优化)。
代码:
cache = {}
def fibonacci(n):
if n in cache:
return cache[n]
if n <= 1:
return n
result = fibonacci(n - 1) + fibonacci(n - 2)
cache[n] = result
return result
try:
num = int(input("请输入一个整数: "))
if num < 0:
print("输入的数必须是非负整数。")
else:
fib_value = fibonacci(num)
print(f"斐波那契数列第 {num} 项的值是: {fib_value}")
except ValueError:
print("输入无效,请输入一个有效的整数。")
结果截图:

3. 拓展 :科赫曲线正向、反向绘制,加入绘制速度、绘制颜色等额外功能
提示 :递归函数需注意终止条件,避免栈溢出。
代码:
import turtle
def keheLine(n=1, length=120, direction=1, speed=3, color='green'):
turtle.speed(speed)
turtle.pencolor(color)
if n == 0:
turtle.forward(length)
else:
for angle in [0, 60 * direction, -120 * direction, 60 * direction]:
turtle.left(angle)
keheLine(n - 1, length / 3, direction, speed, color)
# 输入参数
try:
order = int(input("请输入科赫曲线的阶数(正整数): "))
size = float(input("请输入科赫曲线的长度: "))
speed = int(input("请输入绘制速度 (1-10): "))
color = input("请输入绘制颜色 (如 'blue', 'red'): ")
turtle.pensize(4)
turtle.penup()
turtle.goto(-100, 0)
turtle.pendown()
# 正向绘制
keheLine(order, size, 1, speed, color)
turtle.penup()
turtle.goto(100, 0)
turtle.pendown()
# 反向绘制
keheLine(order, size, -1, speed, color)
turtle.hideturtle()
turtle.done()
except ValueError:
print("输入无效,请输入有效的数值。")
结果截图:


1019

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



