2015-12-03 114 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顯然是知道的分析結果,並希望別的東西...]]