f <- function(n){
s <- 0
for (i in 1:n){
s <- s + (i/2)
}
print(s)
}
棘手的部分當然是s
遞歸從以前的循環依賴的..你會如何在R(s + = i/2)中引入這個循環?
[編輯]
謝謝您的解答。我只是試圖用R中的矢量化來比較循環中的性能增量。
,其中n = 10億以上函數採用287秒,同時兼具sum((1:n)/2)
和sum(seq_len(n)/2)
返回我一個錯誤,該系統「不能分配大小7.5 GB的載體」
爲了比較,相同的功能(與正= 1000000000)在Julia需要38秒(0.87定義s
的類型),在C++ 2.48秒/0.87編譯與優化和Python98秒/0.88使用Numba裝飾器。
這不是'sum(1:n)/ 2'嗎? – Psidom
你爲什麼要矢量化循環?它只是n *(n + 1)/ 4,可以在恆定的時間內計算。 –
這也取決於你的機器,我運行'sum(seq_len(n)/ 2)''n = 1000000000',我得到了'2.5e + 17'作爲答案,沒有任何錯誤。平均需要大約5.5秒的時間。 – 989