我想創建一個函數,它取前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循環來向用戶顯示他也可以擁有該結構。 –