2015-12-03 96 views
1

我想创建一个函数,它取前n个奇数整数的和,即从(2i-1)的i = 1到n的总和。前n个奇数整数的总和

  • 如果n = 1它应该输出1
  • 如果n = 2它应该输出4

我在使用问题for循环仅输出第n术语

n <-2 
for (i in 1:n) 
{ 
    y<-((2*i)-1)      
} 
y 

回答

2

试试这个:

sum=0 
n=2 
for(i in seq(1,2*n,2)){ 
    sum=sum+i 
} 

但是,当然,R在使用循环时相当慢。这就是为什么要避免它们。

+2

使用'cumsum'代替。 – 2015-12-03 02:08:42

+3

你对“for”循环的描述并不完全正确。 – 2015-12-03 02:11:27

+0

我同意。我只是使用了一个for循环来向用户显示他也可以拥有该结构。 –

5

一个R编程,我们尽量避免对循环

cumsum (seq(1,2*n, by=2) ) 

或者只是使用“和”如果你不想要的一系列部分和。

+0

使用'seq_len(n)* 2 - 1'生成序列对'n = 0'是强健的,对我来说快大约2倍。 –

3

其实没有必要使用循环或构建这里的第n个奇数号码的顺序 - 这是一个等差数列,所以我们知道在封闭的形式第n个元素的总和:

sum.first.n.odd <- function(n) n^2 
sum.first.n.odd(1) 
[1] 1 
sum.first.n.odd(2) 
[1] 4 
sum.first.n.odd(100) 
[1] 10000 

这应该比基于forsum的任何解决方案更有效,因为它从不计算序列的元素。

[只看到标题 - OP显然是知道的分析结果,并希望别的东西...]]