R语言批量计算不同长度斐波那契数列的均值中位数并逐次对比的实现方案
实现核心逻辑
- 先补全原有基础函数的边界兼容性:原
fib函数未处理n<2的场景,直接运行fib(1)会返回长度为2的向量,无法匹配长度要求,需要增加参数校验逻辑,保证任意正整数n都能返回对应长度的斐波那契数列 - 批量遍历目标n值序列:不管是指定的n=6/7/8/9,还是全量覆盖1到50的范围,直接通过循环指定遍历区间即可,不需要重复硬编码单值的计算流程
- 复用原有
centre函数的switch逻辑:循环内不需要重写均值、中位数的计算逻辑,通过给centre传入不同的type参数("mean"/"median"),直接触发switch对应的分支,完成计算 - 每轮计算完成后直接对比两个值的大小,取较大值输出,可按需选择是否将每轮结果存入结构化数据框,方便后续核对
可运行完整代码
# 优化边界兼容后的斐波那契生成函数,保留原有核心计算逻辑 fib <- function(n) { if (n < 1) stop("输入的n必须为正整数") # 单独处理n=1的边界场景,修正原函数返回长度不匹配的问题 if (n == 1) return(1) x <- c(1, 1) if (n == 2) return(x) for (i in 3:n) x[i] <- x[i-1] + x[i-2] return(x) } # 完全保留原有基于switch的中心趋势计算函数,无需修改 centre <- function(x, type) { switch(type, mean = mean(x), median = median(x)) } # 初始化结果存储表 result <- data.frame( n_value = integer(), mean_result = numeric(), median_result = numeric(), larger_value = numeric(), check.names = FALSE ) # 循环遍历:将遍历范围改成6:9即可只计算指定n值,改成1:50即可全量覆盖到n=50 for (current_n in 1:50) { # 生成当前长度的斐波那契数列 fib_seq <- fib(current_n) # 调用原有centre函数,通过switch分支分别计算两个统计值 mean_res <- centre(fib_seq, "mean") median_res <- centre(fib_seq, "median") # 对比大小取较大值 larger <- max(mean_res, median_res) # 存入结果表 result <- rbind(result, data.frame( n_value = current_n, mean_result = round(mean_res, 3), median_result = round(median_res, 3), larger_value = round(larger, 3) )) } # 打印全量结果 print(result)
简化版运行说明
如果不需要结构化存储结果,仅需每轮直接打印较大值,可将循环部分简化为:
# 示例:仅计算n=6到n=9的场景 for (current_n in 6:9) { fib_seq <- fib(current_n) mean_res <- centre(fib_seq, "mean") median_res <- centre(fib_seq, "median") cat("n =", current_n, "时,较大的中心趋势值为:", max(mean_res, median_res), "\n") }
简化版对应输出:
n = 6 时,较大的中心趋势值为: 3.333 n = 7 时,较大的中心趋势值为: 5 n = 8 时,较大的中心趋势值为: 7.125 n = 9 时,较大的中心趋势值为: 10.111
内容的提问来源于stack exchange,提问作者Oliver Kanner
相关产品推荐
相关产品推荐

