【发布时间】:2015-01-23 23:04:35
【问题描述】:
我是编程新手,我一直在尝试 Project Euler 以了解有关 R 的更多信息。
困扰我的问题如下:
斐波那契数列中的每个新项都是通过添加前两项来生成的。从 1 和 2 开始,前 10 个术语将是:
1、2、3、5、8、13、21、34、55、89
通过考虑斐波那契数列中值不超过 400 万的项,求偶数项之和。
我已经开始通过设置序列中的前几个数字来解决这个问题:
num <- c(1, 2)
接下来我尝试创建一个函数fib(),它将num 中的最后两个数字相加并将它们附加到向量中。
我的第一次尝试是做以下事情:
num <- c(1, 2)
fib <- function(x) {
sum <- sum(tail(x,2))
while (sum <= 4e6) {
x <- append(x, sum)
return(x)
}
}
但是当我运行这个时,我只会得到一个额外的斐波那契数:
> fib(num)
[1] 1 2 3
反过来,我尝试移动return(x):
num <- c(1, 2)
fib <- function(x) {
sum <- sum(tail(x,2))
while (sum <= 4e6) {
x <- append(x, sum)
}
return(x)
}
但这似乎只会造成无限循环。
需要注意的是,我很乐意将偶数项与模相加,我会在解决这个特定问题后执行此操作。
你能指出我的代码哪里出错了吗? (如果你能在不提供明确解决方案的情况下给我一个正确的方向,那将更加感激。)
感谢@Minnow 和@blakeoft 帮助我解决这个问题。以下是我最终解决此问题的方法:
剧透警告
num <- c(1, 2)
fib <- function(x) {
last2 <- sum(tail(x,2))
while (last2 <= 4000000) {
x <- append(x, last2)
last2 <- sum(tail(x,2))
}
return(x)
}
我不会在模数中包含最后一位,因为我想保留针对初始问题的答案。
【问题讨论】:
标签: r