так же как в остальных языках программирования, образуется кадр стека?
Я вот на понимании того как риализуется рекурсия через стек компилятором, реализовал оригинальное решение, этой задачи на литкоде, чисто рекурсией, без каких либо контейнеров и чего либо ещё:
https://leetcode.com/problems/valid-parentheses/solutions/4190938/no-stack-clean-recursion-100-original-simple-solution/
Тут речь про то, что самим программистом стек не используется, а используется рекурсия. То, что под капотом, здесь не рассматривается
"стек" это просто устройство рантайма, к контейнеру данных это отношения не имеет
ну стек это структура данных реализованая по принципу лифо. Я не понимаю, что ты под рантаймом имеешь ввиду,
Рекурсивный вызов функции
> в С++ не так же как в остальных языках программирования, образуется кадр стека? Ну модулю того, что C++ не требует от имплементации поддерживать вызовы функций через стек вызовов (например, при инлайнинге вызовы функций происходят в обход стека вызовов), ЕМНИП принципиальных отличий от других языков нет.
Ух ты интересно, но по факту, это же оптимизация до компилации просто оптимизирует код, убирая вызов функции, там где посчитает это излишним. Я правильно тебя понял?
Да, я про эту оптимизацию. > убирая вызов функции А это вопрос точки зрения. У тебя тут "стекоцентричный" подход: на стек ничего не пушили и инструкцию call не вызывали, значит вызова не было. Но семантически-то вызов вполне случился и сделал все свои действия. Просто он случился в обход стека вызовов.
Скорее подкопотоцентричный. Не важно что программист написал, важно как компилятор исполнил
Вы можете сами это посмотреть. В первом случае инструкция CALL есть, а во втором - нет
Обсуждают сегодня