2013-07-16 4 views
0

Я читал много статей о рекурсии хвоста. Но я до сих пор не понял, как хвостовая рекурсия не использует пространство стека.Локальные переменные в рекурсии хвоста?

Что относительно локальных переменных и аргументов функции? Они также хранятся в стеке. Что будет с ними в случае хвостовой рекурсии? Как это отличается от обычной рекурсии.

«Хвост вызов [хвостом рекурсии] является своего рода Гото, одетый, как вызов»

Что это на самом деле означает?

ответ

3

Локальные переменные забыты. Весь смысл рекурсии хвостового вызова состоит в том, что это последнее, что произойдет в функции, поэтому локальные переменные не будут иметь значения после вызова. Фактически, отсутствие «после вызова» - это то, что оптимизация хвостового вызова.

EDIT: О цитате:

В сценарии хвостового вызова оптимизированной эти два эквивалентны:

fn(x) { 
    .... 
    fn(y); 
} 

и

fn(x) { 
    start: 
    .... 
    x = y; 
    goto start; 
} 
+0

Хвостовой вызов является своего рода Goto одетый как звонок « Не могли бы вы сделать это более понятным. Что это значит? –

+0

@RahulKurup: Отредактировано. – Amadan

Смежные вопросы