Что нового

Ошибка: Recursion level has been exceeded

Notum

Новичок
Сообщения
71
Репутация
0
Kaster, огромное спасибо, всё работает.
И извините, за быть может излишний тупиз... Все когда то начинали! :-[
 

BadVolt

Новичок
Сообщения
8
Репутация
1
Извиняюсь за некропостинг, но есть вопрос. Данная ошибка возникает только в случае если функция вызывается из себя, или возможен такой вариант:

Функция 1 вызывает функцию 2 - функция 2 вызывает функцию 1 - ...
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
BadVolt [?]
или возможен такой вариант

А что мешает проверить?

Код:
label_1()

Func label_1()
	Local Static $i_seq
	$i_seq += 1
	If ($i_seq < 3000) Then
        Label_2($i_seq)
	EndIf
EndFunc

Func Label_2($i_seq)
	ConsoleWrite($i_seq & @CR)
    Label_1()
EndFunc
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
BadVolt [?]
или возможен такой вариант:
Функция 1 вызывает функцию 2 - функция 2 вызывает функцию 1 - ...
Не возможен, это таже конфетка но в другой обёртке. Смысл не обмануть интерпретатор, а выйти из рекурсивного вызова. Очередной вызов функции (без выхода из неё) добавляет очередную функцию в стек (выделенная память выполняющихся текущих функций), но при этом не убирает её, так как выхода из функции нет, они как бы кэшированы, висят незакрытые. ожидая окончания. А суть та же - достижения пределов размера стека и вылет с ошибкой.
Кстати, на форуме была тема обсуждения рекурсивных функций, выяснилось что на разных системах (x86, x64) лимит разный, при том со справкой совсем не соответствует, например 1800 и 3600. Количество вызовов ограничено разработчиками, как вычисляется неизветстно, но было даже предложение убрать информации об ограничении, так как она не верна. Возможно укажут какой нибуть диапазон приблизительный или минимальный.
 
Верх