R 函数查找斐波那契数

问题描述 投票:0回答:3

R 新手,对于任何错误表示歉意。我正在制作一个 R 函数来查找从 1 开始的 20 个斐波那契数。我制作了这个函数,但是该函数输出的斐波那契数如下所示:

# Output
1  1  2  3  5  8  13   21   34   55   89  144  233  377  610  987 1597 2584 4181 6765

我想要这个:

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

让我烦恼的是我不希望一开始就有两个“1”。开始时只需要一个“1”。另外,函数调用时也遇到问题。这是我的代码:

Ms <- function(moving_sum) {
  Fib <- numeric(20)
  Fib[1]  <- Fib[2] <- 1
  for (i in 3:20) Fib[i] <- Fib[i - 2] + Fib[i - 1] 
  return(Fib)
}

Ms(0)

谢谢。

--- 更新---

如何求偶数总数?这些偶数的总和?

r fibonacci
3个回答
1
投票

合并以下更改

Ms <- function(moving_sum) {
  Fib <- numeric(moving_sum + 1) # Use the parameter moving_sum
  Fib[1]  <- Fib[2] <- 1
  for (i in seq(3, moving_sum + 1)) Fib[i] <- Fib[i - 2] + Fib[i - 1] 
  return(Fib[-1]) # Remove the first number
}

Ms(20)
 [1]     1     2     3     5     8    13    21    34    55    89   144   233   377
[14]   610   987  1597  2584  4181  6765 10946

0
投票

尝试下面的代码

Ms <- function() {
  Fib <- numeric(20)
  Fib[1:2] <- 1:2
  for (i in 3:20) Fib[i] <- Fib[i - 2] + Fib[i - 1]
  evenFibs <- Fib[Fib %% 2 == 0]
  list(
    Fibs = Fib,
    nrOfFibs = length(evenFibs),
    sumEvenFibs = sum(evenFibs)
  )
}

你会得到

> Ms()
$Fibs
 [1]     1     2     3     5     8    13    21    34    55    89   144   233
[13]   377   610   987  1597  2584  4181  6765 10946

$nrOfFibs
[1] 7

$sumEvenFibs
[1] 14328

0
投票
# You need to define first few cases only, and then it's simple
fibonacci <- function(n) {
      if (n <= 0) return(numeric(0))
      if (n == 1) return(0)
      if (n == 2) return(c(0, 1))
      
      fib <- numeric(n)
      fib[1] <- 0
      fib[2] <- 1
      
      for (i in 3:n) {
        fib[i] <- fib[i-1] + fib[i-2]
      }
      
      return(fib)
    }
© www.soinside.com 2019 - 2024. All rights reserved.