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)
谢谢。
如何求偶数总数?这些偶数的总和?
合并以下更改
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
尝试下面的代码
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
# 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)
}