이 코드는 피보나치 수열을 계산하는 클래스를 정의합니다. 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 메서드는 자신을 호출하여 피보나치 수를 계산합니다. 이렇게 하면 코드가 간결해지지만 메모하지 않으면 성능 문제가 발생할 수 있습니다.