При оптимизации какого-то кода в последнее время мы в итоге выполнили то, что я считаю «типом» запоминания, но я не уверен, что нам следует так его называть. Приведенный ниже псевдокод не является алгоритмом фактического (поскольку в нашем приложении мы не нуждаемся в факториалах, а публикация указанного кода является увольнением), но его должно быть достаточно для объяснения моего вопроса. Это был оригинал:
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
.
Но мне интересно, должны ли мы вызывать эту памятку, поскольку она, похоже, определяется как , помнящая прошлые результаты расчетов и использующие их. Это больше о жестких кодах вычислений (не запоминание) и использовании этой информации.
Есть ли правильное название для этого процесса или мы можем утверждать, что запоминание распространяется не только на вычисления, выполненные во время выполнения, но и на вычисления, выполняемые во время компиляции, и даже на те, которые были сделаны в моей голове, прежде чем я даже начал писать код?