我想创建一个函数,它取前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
我想创建一个函数,它取前n个奇数整数的和,即从(2i-1)的i = 1到n的总和。前n个奇数整数的总和
我在使用问题for循环仅输出第n术语
n <-2
for (i in 1:n)
{
y<-((2*i)-1)
}
y
试试这个:
sum=0
n=2
for(i in seq(1,2*n,2)){
sum=sum+i
}
但是,当然,R在使用循环时相当慢。这就是为什么要避免它们。
一个R编程,我们尽量避免对循环
cumsum (seq(1,2*n, by=2) )
或者只是使用“和”如果你不想要的一系列部分和。
使用'seq_len(n)* 2 - 1'生成序列对'n = 0'是强健的,对我来说快大约2倍。 –
其实没有必要使用循环或构建这里的第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
这应该比基于for
或sum
的任何解决方案更有效,因为它从不计算序列的元素。
[只看到标题 - OP显然是知道的分析结果,并希望别的东西...]]
使用'cumsum'代替。 – 2015-12-03 02:08:42
你对“for”循环的描述并不完全正确。 – 2015-12-03 02:11:27
我同意。我只是使用了一个for循环来向用户显示他也可以拥有该结构。 –