在R

时间:2018-05-05 16:39:15

标签: r while-loop fibonacci

我已经写下了一个斐波那契代码,但我无法获得While函数。让我说我已经使序列达到34次计算,但我只想要4,000,000或更少的结果。这是我的代码(底部只是为了获得素数)。

#rm (list=ls())
len <- 34
fibvals <- numeric(len)
fibvals[1] <- 1
fibvals[2] <- 1

for (i in 3:len) { 
  fibvals[i] <- fibvals[i-1]+fibvals[i-2]
} 


fib.mat <- as.matrix(fibvals)
fib.mat[lapply(fib.mat, "%%", 2) == 0]
sum (fib.mat)

···········

我尝试使用这样的代码,无论是无限循环还是只是出错。任何帮助将不胜感激,谢谢!

while (fibvals < 4000000) {
  print(fibvals)
}

3 个答案:

答案 0 :(得分:0)

它不会以fibvals的方式循环你编码它的方式(你将一个TRUE / FALSE值向量传递给while)。你冷,例如使用这样的辅助计数器变量:

counter <- 1
while (fibvals[counter] < 4000000) {
  print(fibvals[counter])
  counter <- counter + 1
}

根据我的理解,这给出了理想的结果。

答案 1 :(得分:0)

您可以执行以下操作(请注意,我的笔记本电脑需要大约45秒):

# Fibonacci numbers using recursive relation
fib <- function(n) {
    val <- n;
    if (n > 1) val <- fib(n - 1) + fib(n - 2);
    return(val);
}

# Print Fibonacci numbers while < 4,000,0000
n <- 0;
while (fib(n) < 4000000) {
    print(fib(n));
    n <- n + 1;
}
#[1] 0
#[1] 1
#[1] 1
#[1] 2
#[1] 3
#[1] 5
#[1] 8
#[1] 13
#[1] 21
#[1] 34
#[1] 55
#[1] 89
#[1] 144
#[1] 233
#[1] 377
#[1] 610
#[1] 987
#[1] 1597
#[1] 2584
#[1] 4181
#[1] 6765
#[1] 10946
#[1] 17711
#[1] 28657
#[1] 46368
#[1] 75025
#[1] 121393
#[1] 196418
#[1] 317811
#[1] 514229
#[1] 832040
#[1] 1346269
#[1] 2178309
#[1] 3524578

答案 2 :(得分:0)

你可以使用Fibonacci序列的显式形式

enter image description here

fibonacciR <- function(n){(((1+sqrt(5))/2)^(n)-(1-((1+sqrt(5))/2))^(n))/sqrt(5)}
#fibonacciR(0:30)
result<-n<-0
while(fibonacciR(n)<4000000){
result<-c(result,fibonacciR(n));
n<-n+1}
result[-1]
[1]       0       1       1       2       3       5       8      13      21      34      55      89     144
[14]     233     377     610     987    1597    2584    4181    6765   10946   17711   28657   46368   75025
[27]  121393  196418  317811  514229  832040 1346269 2178309 3524578

它非常快,在我的电脑上只需不到一秒