А чё, я разве утверждал, что реверсия 50 буковок исчерпает стэк? Если так, то неясно выразился.
Скорее всего, действительно неясно. Ибо фраза
"Глубина рекурсии в MSVC 6.0 реально то ли 6, то ли 8, но всяко меньше 10" действительно может быть понята по-разному. Я воспринял это как глубину вызова, а что имел в виду ты?
Вот фразы на немецком, например, знаш какие длинные бывают - на 200 символов.
Именно это, кстати, мне и пришло в голову, когда писал об ограничениях программы. Ну что ж, если на перевернутые тексты создастся повышенный спрос, выпустим специальную версию для Германии с увеличенным стеком
А если серьезно, то на один вызов уходит немного меньше 100 байт. Думаю, и 20-килобайтный стек современный комп выделить сумеет.
А вот попробуй, реверсировать текст "Войны и Мир", например. Всего-то пара мегабайт.
А вот запросто. Если посмотришь внимательнее, то увидишь, что на самом деле рекурсивна только функция реверса слова. Уткнулись в пробел - пошла обратная раскрутка стека (собственно, этим-то я и воспользовался для извлечения литер в обратном порядке). Так что максимальная глубина рекурсии равна длине самого длинного слова в тексте.
Вот кабы переворачивать весь текст - другое дело. Но там бы я и не рискнул на рекурсию. Во-первых, и впрямь памяти не напасешься, во-вторых, искать начало и конец цепочки не нужно - она одна, и итерация будет столь же краткой и выразительной, а то и получше.
Другой момент - скорость. Исходя из общих соображений, рекурсия (вызов ф-ции) всегда медленнее, чем итерация цикла.
Кто же спорит. Если нужна жесткая оптимизация по времени выполнения, то однозначный выбор в пользу итерации. Хотя наперед тут я бы не зарекался. Во всех представленных итерационных алгоритмах присутствуют либо вызовы библиотечных функций для определения длины цепочки, либо собственные заменители, а они тоже не мгновенны.
Если не лень, то сравни время обработки набора из, ну скажем, 100000 случайных слов твоего любимого размера (50?
) рекурсивным и развёрнутым алгоритмом.
Давай только выберем, какой из вариантов берем за эталон итеративного подхода. Их много накидали все-таки. С рекурсией проще - выбирать не из чего.