Это действительно зависит от того, что вы подразумеваете под «Lisp» и «recursion».
Schemeмандатыtail call optimization, но и другие, чем вы на милость вашего реализации (и ваш optimization settings).
Например, реализация Lisp может не дать оптимизировать рекурсивные вызовы, если параметр debug
выше, чем параметр speed
, так что трассы более значимы. Для получения подробной информации вам необходимо обратиться к руководству по реализации.
Однако критическая точка здесь является то, что (SICP):
... компьютерный язык это не просто способ получить компьютер для выполнения операций, а ... это роман формальной среды для выражающего представления о методологии
IOW, вы пишете код для людей, чтобы читать больше, что для компьютера для выполнения, так что вам нужно больше думать в терминах того, как выразить свой алгоритм ясно, чем, как это будут скомпилированы и выполнены.