Как справиться с максимальной глубиной рекурсии? - PullRequest
4 голосов
/ 14 октября 2010

Многие языки (такие как python) имеют установленную максимальную глубину рекурсии.Я понимаю, что вы можете изменить эту глубину или просто не писать рекурсивные функции в целом, но если вы пишете рекурсивную функцию и достигаете максимальной глубины рекурсии, как бы вы подготовились и справились с этим?

Ответы [ 3 ]

3 голосов
/ 14 октября 2010

В сигнатуре функции есть параметр, который увеличивается с каждым вызовом. Когда он приблизится к максимальной глубине рекурсии, сделайте что-нибудь до того, как будет достигнуто.

Вот пример псевдокода ruby-ish:

def my_recursive_function(current_depth)
   # do stuff
   if current_depth >= MAX_RECURSION_LIMIT
     # throw exception, or output helpful information or return default value
   else
     my_recursive_function(current_depth+1)
   end

end
1 голос
/ 14 октября 2010

Я думаю, что лучший способ - избегать написания рекурсивного кода, который может достичь максимальной глубины. Всегда есть способ переписать рекурсивный алгоритм как итеративный, так что просто сделайте это.

Если вы абсолютно не хотите писать рекурсивный код, который может превысить предел, тогда напишите итеративную резервную копию, перехватите исключение рекурсии и переключитесь на итеративную.

1 голос
/ 14 октября 2010

Единственное, что вы действительно можете сделать в этот момент, - это сообщить пользователю, что что-то пошло не так, и задача не может быть выполнена, как задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...