如何在R中使用for/while循环正确实现100项Grandi级数
问题根因
Grandi级数的标准序列为1、-1交替排列:1, -1, 1, -1, 1, -1...,你的代码错误点非常直接:每次循环向向量追加1和0,取值完全不符合Grandi级数的定义,生成的自然是错误序列。
循环实现方案
以下分别给出符合要求的while循环、for循环实现,均生成严格符合定义的前100项Grandi序列:
while循环版本
# 初始化存储向量、迭代计数器 grandi <- c() count <- 1 while (count <= 100) { # 奇数位置赋值1,偶数位置赋值-1 grandi[count] <- ifelse(count %% 2 == 1, 1, -1) count <- count + 1 } print(grandi)
for循环版本
grandi <- c() for (i in 1:100) { # 利用幂运算直接计算当前项值,无需条件判断 grandi[i] <- (-1)^(i + 1) } print(grandi)
效率提示:R中逐次扩展向量的循环写法性能较差,如果你不需要强制用循环实现,直接用向量化操作一行就能得到结果:
grandi <- rep(c(1, -1), 50)运行结果和上述循环版本完全一致,执行速度快几个数量级。
内容的提问来源于stack exchange,提问作者Nonce
相关产品推荐
相关产品推荐

