티스토리 뷰

Algorithm

Recursive_Fibonacci Sequence

Dev gOm 2016. 9. 7. 14:16

Explain

    • 피보나치 수는 0과 1로 시작하며, 다음 피보나치 수는 바로 앞 두 피보나치 수의 합이된다. (\( F_n = F_{n-1} + F_{n-2} \))
    • 모든 문제를 Recursion 한 방식으로 생각하는 것뿐만 아니라 그 이후 반드시 다른방식(Iteration, Memozation) 등 과 비교하여 최적의 방법을 찾아내는 작업도 병행되어야 하는 점을 알아야 된다.
    • 이 문제는 Recursion 방식의 큰 위험성에 대해 파악할 수 있는 문제이다.

Formula

$$\begin{equation*} F_n=F_{n-1}+F_{n-2}, \quad F_1=1, \quad F_2=1 \end{equation*}$$ 
$$\begin{equation*} 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, \ldots \end{equation*}$$

Recursion

//Time complexity O(n^2)
long fibo(long n)
{
	if(n < 2)
	{
		return n;
	}
	else
	{
		return fib(n-1) + fib(n-2);
	}
}

Memozation

//allocate array for memo, setting all entries to zero;
//initialize memo[1] and memo[2] to 1;
//Time complexity O(n)
long fibo(long n)
{
	if(memo[n] == 0)
	{
		memo[n] = fib(n-1) + fib(n-2);
	}

	return memo[n];
}

Time Complexity

    • 위처럼 Recursion, Memozation의 차이는 각 \( O(n^2) , O(n) \) 으로 인자의 크기가 커질수록 연산 속도의 차이는 매우 증가한다는 것을 알 수 있다. 
    • Memozation 방식의 경우 메모리에 계산된 수를 저장해두는 방식이라 Iteration 방식과 달리 연산의 중복이 없으므로 훨씬 효율적인 속도가 나오는 것을 알 수 있다.

Reference.




'Algorithm' 카테고리의 다른 글

4673_셀프 넘버  (0) 2016.10.05
1065_한수  (0) 2016.10.05
Matrix multiplication 행렬의 곱셈  (0) 2016.09.19
Matrix 행렬  (0) 2016.09.19
Recursive_Sequence  (0) 2016.09.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함