斐波那契函数

时间:2014-03-25 09:16:26

标签: r fibonacci

我们已经完成了一项任务,我们无法弄清楚:

写一个R函数,它将生成一个包含第一个n的向量 Fibonacci序列的术语。其中的步骤如下: (a)创建用于存储结果的向量。 (b)初始化前两个要素。 (c)运行一个循环,i从3运行到n,填充第i个元素

到目前为止工作:

vast=function(n){
 vast=vector()
 vast[1]=1
 vast[2]=1
 for(i in 3){vast[i]=vast[i-1]+vast[i-2]}
 }

我们最终得到的是错误:'closure'类型的对象不是子集化的?

我们如何生成想要的功能?

1 个答案:

答案 0 :(得分:6)

我在@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)
}

当然,我们都有关于编程的知识,但这就是我们在这里的原因。在某些时候我们都得到了某人的帮助,我们都会变得更好,因为我们也帮助其他人改进。

更新:正如@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)
}