R中小于1000的斐波那契数列

Fibonacci sequence less than 1000 in R

我正在尝试使用 R 中的 while 循环打印小于 1000 的斐波那契数列。

到目前为止,

fib <- c(1,1)
counter <-3
while (fib[counter-1]<1000){
  fib[counter]<- fib[counter-2]+fib[counter-1]
  counter = counter+1
}
fib

我有这个代码。仅给出前两个数字:1,1。这是打印:

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

如何修复我的代码以仅打印少于 1000 个?

你的方法的问题是当 while 循环中的条件 (fib[counter-1]<1000) 是 FALSE 你已经在 fib 中添加了大于1000.

您可以 return fib[-length(fib)] 删除最后一个号码或在将号码插入 fib 之前检查号码。

fib <- c(1,1)
counter <-3

while (TRUE){
  temp <- fib[counter-2] + fib[counter-1]
  if(temp < 1000) 
    fib[counter] <- temp
  else
    break
  counter = counter+1
}
fib
#[1]   1   1   2   3   5   8  13  21  34  55  89 144 233 377 610 987

您可以更改 while 条件以对最后 2 个答案求和,而不仅仅是最后一个:

fib <- c(1,1)
counter <-3
while (sum(fib[counter - 1:2]) < 1000){
    fib[counter]<- fib[counter-2]+fib[counter-1]
    counter = counter+1
}
fib
#>  [1]   1   1   2   3   5   8  13  21  34  55  89 144 233 377 610 987

或者完全摆脱 counter

fib <- c(1,1) 
while (sum(fib[length(fib) - 0:1]) < 1000) fib <- c(fib, sum(fib[length(fib) - 0:1]))
fib
#>  [1]   1   1   2   3   5   8  13  21  34  55  89 144 233 377 610 987

不是检查最后一个元素 wrt 1000 的值,对于预期的输出,您应该检查最后两个元素的总和。

fib <- c(1,1)
counter <-3
while (fib[counter-2]+fib[counter - 1]<1000){
  fib[counter]<- fib[counter-2]+fib[counter-1]
  counter = counter+1
}
fib