我的投票是在封闭的形式@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