我写了一个循环来计算斐波那契数列的前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)
但是代码中的(小的)更改没有提供正确的顺序。 有更聪明的方法吗?
答案 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)