Статические переменные создаются в сегменте данных во время компиляции. В то время как во время выполнения один и тот же экземпляр статической переменной (которая была создана в сегменте данных) обновляется вместо создания переменной i
снова и снова в сегменте стека при каждом рекурсивном вызове.
поэтому, когда функция возвращает main()
, ту же переменную i, созданную на сегменте данных, ссылается на printf()
оператор, который был уже уменьшен до 0, из-за предыдущих операций.
Теперь, переходя к второму вопросу, если (0) оценивается как ложное условие там, цикл завершается только там.
удалить ключевое слово 'static'. – Himanshu
Также удаление статического элемента вызовет 'StackOverflowException'. – AntiHeadshot
Вы никогда не должны вызывать main() рекурсивно, это крайне плохая практика. В общем, рекурсии следует избегать, когда это возможно. – Lundin