如何在R语言中无需循环计算多个n值的∑2^i(i=0:n)
不用循环计算∑2^i(i从0到n)的R语言方法
嘿,这个问题我太熟了!你之前遇到的问题其实是因为当n=c(5,10,15)时,0:n会直接生成从0到15的完整序列,而不是分别对应每个n值生成0到n的子序列,所以sum()算出来的是所有项的总和,不是每个n对应的结果。不用循环的话,有两个超实用的办法:
方法一:用向量化函数逐个处理每个n值
R里的sapply()函数可以帮我们对向量里的每个元素单独执行计算,完美解决这个问题:
# 定义要计算的n值 n_values <- c(5, 10, 15) # 用sapply逐个计算每个n对应的求和结果 result_sapply <- sapply(n_values, function(x) sum(2^(0:x))) # 查看结果 result_sapply
运行后会得到:[1] 63 2047 65535,正好对应n=5、10、15时的求和结果。
方法二:利用等比数列求和公式(高效首选)
其实这个求和式是首项为1、公比为2的等比数列前n+1项的和,数学公式直接是:2^(n+1) - 1。用这个公式的话,完全不需要生成序列再求和,直接向量化计算,速度快很多:
# 直接用公式计算 result_formula <- 2^(n_values + 1) - 1 # 查看结果 result_formula
得到的结果和方法一完全一致:[1] 63 2047 65535。
可以验证一下,比如n=5时,2^(5+1)-1=64-1=63,和手动计算1+2+4+8+16+32的结果完全吻合,绝对靠谱!
内容的提问来源于stack exchange,提问作者ExamFML
相关产品推荐
相关产品推荐

