TCO (Оптимизация последнего вызова) является процессом, которым умный компилятор может позвонить функции и не взять дополнительное стековое пространство. только ситуация, в которой это происходит, состоит в том, если последняя инструкция, выполняемая в функции f, является вызовом к функциональному g (Примечание: g может быть f). Ключ здесь - то, что f больше не нужно стековое пространство - это просто звонит g и затем возвращает любой , g возвратился бы. В этом случае оптимизация может быть сделана этим, g просто выполняет и возвращает любое значение, которое это имело бы к вещи который названный f.
Эта оптимизация может выполнить рекурсивные вызовы, берут постоянное стековое пространство, вместо того, чтобы взорваться.
Пример: эта функция факториала не является TCOptimizable:
def fact(n):
if n == 0:
return 1
return n * fact(n-1)
Эта функция делает вещи, кроме того, вызывают другую функцию в ее операторе возврата.
Это ниже функции - TCOptimizable:
def fact_h(n, acc):
if n == 0:
return acc
return fact_h(n-1, acc*n)
def fact(n):
return fact_h(n, 1)
Это вызвано тем, что последняя вещь произойти в любой из этих функций состоит в том, чтобы вызвать другую функцию.
Щелкните правой кнопкой мыши проект MSI и выберите свойства , на странице параметров есть параметр для «Имя выходного файла» . Просто измените это.
Я проверял это только в VS2008.