RでFibonacci数を計算

参考プログラム: fibonaccies.zip(UFT-8/LF)

Fibonacci数列 $f_n$ \begin{align*} f_0 &=0,\\ f_1 &=1,\\ f_n&= f_{n-1} + f_{n-2},\quad n\geq 2 \end{align*} を計算するRのプログラムを考えてみる。

繰り返しによって$f_n$を求める

fibonacci <- function(n){
  if (n == 0)
    return(0)
  else if (n == 1)
    return(1)
  else {
    f0 = 0
    f1 = 1
    for(i in 2:n){
      f = f0 + f1
      f0 = f1
      f1 = f
    }
    return(f)
  }
}

再帰的に$f_n$を求める

fibonacci <- function(n){
  if (n == 0)
    return(0)
  else if (n == 1)
    return(1)
  else 
    return(fibonacci(n-1) + fibonacci(n-2))
}

Fibonacci数列をベクトルで返す

# n番目までのFibonacci数をベクトルで返す
fibonacci_vector <- function(n) {
  if(n == 0)
    return(c(0))
  else if(n==1)
    return(c(0, 1))
  else {
    fl <- c(0, 1)
    for(i in 3:(n + 1)) {
      f <- fl[i - 1] + fl[i - 2]
      #fl <- append(fl, f)
      fl <- c(fl, f)
    }
    return(fl)
  }
}

Fibonacci数列をリストで返す

# n番目までのFibonacci数をリストで返す
fibonacci_list <- function(n) {
   if(n == 0)
     return(list(0))
   else if(n == 1)
     return(list(0, 1))
   else {
     fl <- list(0, 1)
     for(i in 2:n) {
       f <- fl[[i-1]] + fl[[i]]
       fl <- append(fl, f)
       #fl <- list(fl, list(f))
     }
     return(fl)
   }
}