R语言如何批量处理指定数值计算Collatz序列并保存中间结果?
实现R语言批量计算Collatz序列并按行存储的方案
前置逻辑修正
你之前写的初步判断分支写反了规则:偶数应当执行除以2操作,奇数才执行乘3加1操作,写代码时注意不要搞反判断条件。
完整实现代码
# 1. 封装单个数值的Collatz序列计算函数,返回从初始值到1的完整序列 get_collatz <- function(n) { res <- n while (n != 1) { if (n %% 2 == 0) { n <- n / 2 } else { n <- n * 3 + 1 } res <- c(res, n) } return(res) } # 2. 初始化输入序列 df <- seq(5,10) # 3. 批量计算所有数值的Collatz序列,先用列表存储(适配不同长度的序列) collatz_list <- list() for (i in seq_along(df)) { collatz_list[[i]] <- get_collatz(df[i]) } # 4. (可选)将结果转为按行对齐的数据框,长度不足的位置填充NA max_step <- max(sapply(collatz_list, length)) collatz_df <- as.data.frame(do.call(rbind, lapply(collatz_list, function(x) { c(x, rep(NA, max_step - length(x))) }))) # 给行列命名,方便识别 colnames(collatz_df) <- paste0("step_", 0:(max_step-1)) rownames(collatz_df) <- paste0("init_val_", df)
结果说明
- 如果你不需要规整格式,直接用
collatz_list即可,每个元素对应一个初始值的完整计算序列,无冗余填充 - 如果你需要按行存储的表格格式,直接调用
collatz_df即可,行名对应初始数值,列名对应计算步骤,空值用NA填充
内容的提问来源于stack exchange,提问作者nik
相关产品推荐
相关产品推荐

