Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Бесконечная рекурсия и бесконечный цикл


Автор: Entry_N3 8.12.2009, 18:36
Почему при бесконечной рекурсии Java падает с ошибкой, а при бесконечном цикле не падает? Кто знает, наверное, поймет вопрос.

Автор: DarkProg 8.12.2009, 18:58
Вообще-то это у любого языка, не только у Java

Дело в том что при бесконечной рекурсии происходит вызов процедуры из самой себя же и предыдущая которая вызывалась попадает в программный стэк, который ограничен по своему объёму и как следствие ограниченности объёма происходит его переполнение при бесконечной рекурсии(я прошу прощение за некоторую безграмотность и невнятность написанного, это всё из-за сильного недосыпа)

А когда происходит бесконечный цикл, даже если в его основе лежит таже процедура, то тут пухнет уже объём занимаемый в ОЗУ, ну как бы программный стэк он ограничен и конечен(пэтому он переполняется), а если использовать бесконечный цикл, то тут уже другое.

Правда если цикл слишком уж долго будет выполняться, то тут как никрути система сама скинет прогу считая её повисшей(сам наблюдал чистол ради эксперимента)

Ещё раз прошу проение за некоторую бессвязность моей речи...

Автор: Entry_N3 9.12.2009, 12:25
Понятно, спасибо.  smile 

Автор: kosmonaFFFt 10.12.2009, 21:21
Насчет Java это верно - нету там оптимизации хвостовой рекурсии в компиляторе (javac)...

Автор: ivanovpv 11.12.2009, 09:56
Цитата(DarkProg @  8.12.2009,  18:58 Найти цитируемый пост)
Ещё раз прошу проение за некоторую бессвязность моей речи... 


Если короче, то происходит переполнение стека...   smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)