实验3 函数与代码复用

实验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("输入无效,请输入有效的数值。")

结果截图:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值