这是我的代码:
============================
public class Foo
{
//Class field to store factorial values as those are calculated
private static Dictionary<uint, double> _factorialCache;
public Foo()
{
_factorialCache = new Dictionary<uint, double>();
}
public double Factorial(uint inputValue)
{
if (inputValue < 2) return 1;
if (_factorialCache.ContainsKey(inputValue))
return _factorialCache[inputValue];
_factorialCache.Add(inputValue, (double)inputValue * Factorial(inputValue - 1));
return _factorialCache[inputValue];
}
}
============================
从数学上讲,这是可行的。一个有趣的事情是,如果 5 的阶乘(例如)是计算的第一个值,则缓存在此计算期间存储 2、3、4 和 5 的阶乘(即它存储所有“中间”阶乘)。在我的例子中,永远不会有超过一个 Foo 类的实例同时存在,但我决定在这个例子中将字典声明为静态的,以涵盖同时存在多个 Foo 实例的情况时间。
我的问题是:
这是从技术角度(例如线程安全或类似)避免为相同值重新计算阶乘的最佳方法吗?
是否有任何其他方法(例如与惰性评估或类似的方法)可以避免需要(静态)类范围变量来存储先前计算的值?
欢迎所有建议。
谢谢,
d。