Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Fibonacci Number

Write a program which prints $n$-th fibonacci number for a given integer $n$. The $n$-th fibonacci number is defined by the following recursive formula:

\begin{equation*}
fib(n)= \left \{
\begin{array}{ll}
1　 & (n = 0) \\
1　 & (n = 1) \\
fib(n - 1) + fib(n - 2) & \\
\end{array}
\right.
\end{equation*}

Input

An integer $n$ is given.

output

Print the $n$-th fibonacci number in a line.

Constraints

$0 \leq n \leq 44$

Sample Input 1

3

Sample Output 1

3

Solution in Ruby (judge verdict: Accepted)

n = gets.chomp.to_i

## これは n が数十を超えると計算量が大きくて使いものにならなくなる。
# def fibonacci(n)
#     return 1 if n == 0 || n == 1
#     return fibonacci(n - 2) + fibonacci(n - 1)
# end
# puts fibonacci(i)


## 動的計画法のメモ化再帰を使うと効果的。
# dp = []
# def dpFibonacci(n, dp)
#     if n == 0 || n == 1 then
#         dp[n] = 1
#         return dp[n]
#     end
#     return dp[n] if dp[n]
#     dp[n] = dpFibonacci(n - 2, dp) + dpFibonacci(n - 1, dp)
# end
# puts dpFibonacci(i, dp)


## もしくは動的計画法をループに展開したアルゴリズムとして実装することもできる。
## 下の loopedDpFibonacci は、与えられた配列 fib に第n項までのフィボナッチ数列を格納してくれる。
fib = []
def loopedDpFibonacci(n, fib)
    fib[0] = 1
    fib[1] = 1
    if n >= 2 then
        2.upto(n) do |i|
            fib[i] = fib[i - 2] + fib[i - 1]
        end
    end
end

loopedDpFibonacci(n, fib)
puts fib[n]