Я новичок в программировании и я пытался Project Euler, чтобы узнать больше о Р.Проект Эйлера # 2 в R
Вопрос, который топала меня выглядит следующим образом:
Каждый новый член в последовательности Фибоначчи генерируется добавлением предыдущих двух членов. Начиная с 1 и 2, первые 10 условия будут:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89
Рассматривая термины в последовательности Фибоначчи, чьи значения не превышают 4 миллиона, найдите сумму четных членов.
Я начал решать эту проблему, установив первые пары цифр в последовательности:
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 за то, что помогли мне разобраться с этим. Вот то, что я в конечном итоге делает, чтобы решить эту проблему:
Спойлер ALERT
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)
}
я не буду включать последний бит с по модулю, так как я хочу, чтобы держать ответ специфичен для первоначального вопроса.
Дополнительный намек: в конце каждой итерации цикла обратите внимание на то, что произошло с каждой из переменных. Всего объявлено 3, а именно 'num',' sum' и 'x'. – blakeoft
Этот комментарий был удар, в котором я нуждался, спасибо. –