我的投票是在封閉的形式@bdecaf建議(因爲它會惹惱你的老師):
vast = function(n) round(((5 + sqrt(5))/10) * ((1 + sqrt(5))/2) ** (1:n - 1))
但你可以修復你已經有兩個小的改動代碼:
vast=function(n){
vast=vector()
vast[1]=1
vast[2]=1
for(i in 3:n){vast[i]=vast[i-1]+vast[i-2]}
return(vast)
}
我仍然會遵循已經給出的一些建議 - 特別是使用不同的名稱作爲您的向量和函數,但事實是有很多不同的方式來實現您的目標。首先,在這種情況下,根本就沒有必要初始化一個空向量,因爲我們可以在R中使用for
循環來擴展向量,就像您已經在做的那樣。你可以做到以下幾點,例如:
vast=function(n){
x = c(1,1)
for(i in 3:n) x[i] = x[i-1] + x[i-2]
return(x)
}
當然,我們每個人都有的東西,以瞭解編程,但是這就是爲什麼我們在這裏。我們都在某個時候從某個人那裏得到了幫助,當我們幫助別人改善時,我們都會變得更好。
UPDATE:作爲@Carl Witthoft指出,這是初始化向量時大小順序是已知的節省時間和空間的合適大小,所以另一種方式來完成這項任務將是一個最佳實踐:
vast=function(n) {
x = numeric(n)
x[1:2] = c(1,1)
for(i in 3:n) x[i] = x[i-1] + x[i-2]
return(x)
}
1.給你的向量一個不同於函數的名字。 2.創建它時,使您的矢量的類型和大小正確:'fib = numeric(n)'。 – Roland
初始化'浩大< - rep(NA,n)'並正確循環'(我在3:n)'。 –
提示您的第二個問題:google。僅僅5秒,它給了我幾種不同的選擇。 – Mikko