最近在优化一些代码时,我们最终执行了我认为是一种“类型”的记忆,但我不确定我们应该这样称呼它。下面的伪代码不是实际的算法(因为我们的应用程序中几乎不需要阶乘,并且发布所述代码是一种攻击行为),但它应该足以解释我的问题。这是原来的:
def factorial (n):
if n == 1 return 1
return n * factorial (n-1)
很简单,但我们添加了固定点,这样就可以避免大量计算,例如:
def factorial (n):
if n == 1 return 1
if n == 10 return 3628800
if n == 20 return 2432902008176640000
if n == 30 return 265252859812191058636308480000000
if n == 40 return 815915283247897734345611269596115894272000000000
# And so on.
return n * factorial (n-1)
当然,这意味着它12!
被计算为12 * 11 * 3628800
而不是效率较低的12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
。
但我想知道我们是否应该称之为记忆,因为这似乎被定义为记住过去的计算结果并使用它们。这更多是关于硬编码计算(不记住)和使用该信息。
这个过程是否有合适的名称,或者我们可以声称记忆不仅可以延伸到运行时完成的计算,还可以延伸到编译时完成的计算,甚至可以追溯到我开始编写代码之前在我脑海中完成的计算?