Prgramming/자료구조

[자료구조] 피보나치 수열

맏난거 2025. 1. 16. 23:31

시간 복잡도 : O(2^n)

// C# 
Console.WriteLine($"{F1(30)}");


int F1(int n)
{
    if (n <= 0) return 0;
    else if (n == 1) return 1;
    else return F1(n - 1) + F1(n - 2);
}

위 코드는 비효울적이다...

 

시간 복잡도 : O(n)

// C#

Dictionary<int, int> dic = new Dictionary<int, int>();
Console.WriteLine($"{F2(50, dic)}");

int F2(int n, Dictionary<int, int> numbers)
{
    int v;
    if (n <= 0) return 0;
    else if(n == 1) return 1;
    else if (numbers.TryGetValue(n, out v)) return v;
    else return numbers[n] = F2(n - 1, numbers) + F2(n - 2, numbers);
}

딕셔너리로 해당 n의 키값으로 저장하고 나중에 또 다시 재귀호출로 인해서 계산하지 않고 

바로 값을 반환하여 중복 호출은 하지않게 만들어주는 코드다.

해당 값을 어디에 기억하는 장소를 만든것이다.