具有R的斐波那契n步数序列

时间:2015-12-05 18:55:29

标签: r fibonacci

Fibonacci n-step number sequences是Fibonacci数的推广,您可以将两个以上的数字加在一起。我尝试用R编写一个函数来做到这一点。

首先是经典的斐波那契数字:

fib <- function(n){
  fib <- vector()
  fib[1] <- 1
  fib[2] <- 1
  for(i in 3:n){
    fib[i] <- fib[i-1] + fib[i-2]
  }
  return(fib)
}

fib(7)
## [1]  1  1  2  3  5  8 13

接着是所谓的Tribonacci数字:

fib3 <- function(n){
  fib <- vector()
  fib[1] <- 1
  fib[2] <- 1
  fib[3] <- 2
  for(i in 4:n){
    fib[i] <- fib[i-1] + fib[i-2] + fib[i-3]
  }
  return(fib)
}

fib3(7)
## [1]  1  1  2  4  7 13 24

依旧......

初始值是2的幂,所以对于n = 3,它是1,1,2,对于n = 4,它是1,1,2,4,对于n = 5,它是1,1,2, 4,8等等。

所以我的想法是动态修改上面的函数,特别是for循环中的参数个数,但我不太了解R来有效地实现它。

我的问题
如何修改上述代码以创建任何Fibonacci n步数序列?

其他信息
可以在这里找到更多细节和不同的实现......遗憾的是,不在R:Rosetta code Fibonacci n-step number sequences

1 个答案:

答案 0 :(得分:3)

如果用户提供了n(步骤编号)和starting,则提供了一个完全n起始值和K的向量,即所需的元素数量顺序,您可以执行以下操作。

n <- 7
K <- 100
starting <- c(1,1,1,1,1,1,1)

fibn <- function(n, K, starting){
 sequence <- vector(mode='numeric', length=K)
 sequence[1:n] <- starting
 for(i in (n+1):K){
  sequence[i] <- sum(sequence[(i-n):(i-1)])
 }
 return(sequence)
}