我已经写下了一个斐波那契代码,但我无法获得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)
}
答案 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序列的显式形式
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
它非常快,在我的电脑上只需不到一秒