ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
711409 Топик полностью
vugluskr (07.11.2016 20:08 - 20:13, просмотров: 157) ответил ReAl на В более простом варианте и gcc хвостовую рекурсию замечает и превращает в цикл, а в этом не хочет - толи плюсы потянули лишнее и замазали картину, толи ещё что.
ахренеть тут специалисты собрались поговорить о хвостовой рекурсии тема находится яндексом, поэтому чтоб сеть не засорялась мусором, пришлось зарегистрироваться и комментарий оставить хвостовая рекурсия: https://ru.wikiped …iki/Хвостовая_рекурсия ваш код для факториала в wiki приводится дословно как пример "простой рекурсивной функции, которая не является хвостово-рекурсивной и не может быть автоматически преобразована в итеративную" ну, понятно что это общий случай. на частные случае оптимизатор можно "натаскать" исходный код POV-a тоже и близко не является хвостовой рекурсией. На пальцах: хвостовая рекурсия возвращает сам рекурсивный вызов, а не функцию от него. Факториал возвращает *, а пример POV-a возвращает конкатенацию строк. код с использованием хвостовой рекурсии всегда (практически) требует параметра-аккумулятора пример для факториала из вики: int fac_times (int n, int acc) { return (n==0) ? acc : fac_times(n - 1, acc * n); } int factorial (int n) { return fac_times (n, 1); }