как сохранить все члены в последовательности Фибоначчи до `n` - PullRequest
1 голос
/ 26 апреля 2020

Я пытался сохранить все элементы в последовательности Фибоначчи до заданного числа n. Например, если функция fib, мой ожидаемый выход будет

  • 1 1 2 для fib(3)
  • 1 1 2 3 5 для fib(5)
  • 1 1 2 3 5 8 13 21 для fib(8)

и т. Д.

Мой код

fib <- function(n) {
  if (n<= 2) {
    return(1)
  } else {
    return(f(n-1)+f(n-2))
  }
}

, но он дает только одно значение для n -й элемент в последовательности Фибоначчи.

Любая подсказка, чтобы сохранить элементы с 1 до n как результат fib(n)? Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 апреля 2020

Я думаю, у вас есть несколько способов сделать это:

  • Подход 1: Переопределить fib рекурсивным способом
fib <- function(n) {
  if (n<=2) return(rep(1,n))
  c(u <- Recall(n-1),sum(tail(u,2)))
}

такой, что

> fib(10)
 [1]  1  1  2  3  5  8 13 21 34 55

> fib(20)
 [1]    1    1    2    3    5    8   13   21   34   55   89
[12]  144  233  377  610  987 1597 2584 4181 6765
  • Подход 2: Используйте fib, но с sapply
fib1 <- function(n) sapply(seq(n),fib)

таким, что

> fib1(10)
 [1]  1  1  2  3  5  8 13 21 34 55

> fib1(20)
 [1]    1    1    2    3    5    8   13   21   34   55   89
[12]  144  233  377  610  987 1597 2584 4181 6765
  • Подход 3: Использование for l oop ( Я думаю, что это будет самый эффективный из трех подходов )
fib2 <- function(n) {
  r <- rep(1,n)
  if (n>=3) {
    for (k in 3:n) {
      r[k] <- sum(r[k-(1:2)])
    }
  }
  r
}

такой, что

> fib2(10)
 [1]  1  1  2  3  5  8 13 21 34 55

> fib2(20)
 [1]    1    1    2    3    5    8   13   21   34   55   89
[12]  144  233  377  610  987 1597 2584 4181 6765
1 голос
/ 26 апреля 2020

Если вы хотите сделать это как рекурсию, вам нужно добавить каждый элемент в начало списка (в зависимости от порядка, в котором вы хотите элементы).

Вы также можете сделать это для l oop и тогда индексирование будет более простым. Вы можете использовать функцию, которую вы уже написали, но это будет неэффективно. Было бы быстрее получить доступ к элементам i-1 и i-2 вашего массива, чтобы вычислить ih element.

Сейчас вы нигде не храните предыдущие элементы.

...