斐波那契数列和更改规则

时间:2019-03-31 14:02:55

标签: r fibonacci

我写了一个循环来计算斐波那契数列的前10个数字。 F(0)= 0; F(1)= 1;规则:F(i)= F(i-2)+ F(i-1)

x <- c(0,1)
while (length(x) < 10) {
  position <- length(x)
  new <- x[position] + x[position-1]
  x <- c(x,new)
}
print(x)

现在我想将规则更改为:F(i)= F(i-1)-F(i-2)

x <- c(0,1)
while (length(x) < 10) {
  position <- length(x)
  new <- x[position-1] - x[position]
  x <- c(x,new)
}
print(x)

但是代码中的(小的)更改没有提供正确的顺序。 有更聪明的方法吗?

2 个答案:

答案 0 :(得分:2)

如果您希望规则为F(i)=F(i-1)-F(i-2),则应该为

new <- x[position] - x[position-1]

另一方面,如果只对一个较小的向量执行此操作,则没有什么区别,但是如果您打算对一个较大的向量执行此操作,则应事先为该对象分配一个向量NA,Os或您喜欢的任何东西。否则,如果使向量随着每次迭代而增长,则代码可能会变得很慢。

类似这样的东西:

len <- 10
x <- rep(NA, len)
x[1] <- 0
x[2] <- 1
for (i in 3:len) {
  x[i] <- x[i-1] - x[i-2]
}

答案 1 :(得分:0)

我将执行完整的参数功能:

 fibonacci <- function(len, x,func){

      while (length(x) < len) {
        position <- length(x)
        new <- func(x,position)
        x <- c(x,new)
      }
      x
    }

    fibo1 <- function(x,position){x[position] + x[position-1]}
    fibo2 <- function(x,position){x[position] - x[position-1]}
    fibo3 <- function(x,position){x[position-1] - x[position]}
    start <- c(0,1)
    fibonacci(10,start,fibo1)
    fibonacci(10,start,fibo2)
    fibonacci(10,start,fibo3)

或使用@mgiormenti最佳代码:

fibonacci <- function(len, x,func){

        for (i in (length(x)+1):len) {
          x[i] <- func(x,i-1)
        }

    x
}

fibo1 <- function(x,position){x[position] + x[position-1]}
fibo2 <- function(x,position){x[position] - x[position-1]}
fibo3 <- function(x,position){x[position-1] - x[position]}
start <- c(0,1)
fibonacci(10,start,fibo1)
fibonacci(10,start,fibo2)
fibonacci(10,start,fibo3)