2012-04-15 5 views
0

Я занимаюсь классом алгоритмов, и я строил реализацию Kosaraju's algorithm как часть домашней работы.System.StackOverflowException слишком много рекурсии

У меня есть несколько небольших наборов данных, где алгоритм возвращает правильные результаты и выполняет штраф. Однако, когда я пытаюсь выполнить домашнее задание, которое имеет 5105,043 ребра и 875 714 узлов, я получаю исключение System.StackOverflowException, которое, кажется, связано с чрезмерной рекурсией.

Однако эта рекурсия необходима для решения вопроса. Так что я спрашиваю, есть ли способ настроить .Net, чтобы позволить больше рекурсии?

+1

Как глубоко * * ваша рекурсия в данный момент? –

+0

Как я узнаю, что из исключения? Извините, я не слишком хорошо разбираюсь в отладке этой ошибки. – baynezy

+0

Не можете ли вы изменить свою DFS, чтобы быть итеративной? – dvvrd

ответ

3

Так что я спрашиваю, есть ли способ настроить .Net, чтобы разрешить больше рекурсии?

Предел рекурсии основан на размере стека, выделенном для текущего потока. Это может быть changed via editbin /stack для программы или отредактировано для определенной темы при построении потока.

Это считается, любой recursive algorithm can be switched to using a stack instead. Вероятно, это со временем окажется более удобным, поскольку оно больше не будет зависеть от того, будет ли очень большой стек обработан соответствующим образом.

+0

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

Смежные вопросы