Day 1 – Memoization

This code defines a class that calculates the Fibonacci sequence.

이 코드는 피보나치 수열을 계산하는 클래스를 정의합니다. Calculate 메서드는 피보나치 수열을 재귀적으로 계산하고 메모이제이션을 사용하여 이미 계산된 값을 저장합니다. 이로 인해 계산 속도가 크게 향상됩니다.


Codes

Language: C#

FibonacciCalculator.cs

/// <summary>
/// Calculate a Fibonacci numbers
/// </summary>
class FibonacciCalculator
{

    // cache for memoization
    private Dictionary<int, long> _cache = new Dictionary<int, long>();

    /// <summary>
    /// Calculate the number
    /// </summary>
    /// <param name="n">numbers to calculate</param>
    /// <returns></returns>
    /// <exception cref="ArgumentException"></exception>
    public long Calculate(int n)
    {
        if (n < 0) throw new ArgumentException("n must be 0 or greater.");
        if (n <= 1) return n;

        // Returns if there is a cached value
        if (_cache.TryGetValue(n, out long value))
            return value;

        // The Calculate method calls itself to calculate Fibonacci numbers.
        // This makes the code concise, but can cause performance issues without memoization.
        value = Calculate(n - 1) + Calculate(n - 2);
        _cache[n] = value; // Store results in cache
        return value;
    }
}
C#
Program.cs
FibonacciCalculator calculator = new();
int term = 10;
long result = calculator.Calculate(term);
Console.WriteLine($"The results for {term}: {result}");
C#

The beauty of this code lies in:

  • Memoization:
    이미 계산된 결과를 _cache Dictionary에 저장하면, 동일한 계산을 반복하지 않고도 빠르게 결과를 얻을 수 있습니다.
  • Exceptions:
    n이 0보다 작은 경우 ArgumentException을 발생시켜 메서드의 입력 값이 유효한지 확인합니다.
  • Recursive Call:
    Calculate 메서드는 자신을 호출하여 피보나치 수를 계산합니다. 이렇게 하면 코드가 간결해지지만 메모하지 않으면 성능 문제가 발생할 수 있습니다.

Links

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다