Я предполагаю, что вы спрашиваете, потому что у вас действительно есть реальная проблема с раздачей стека.Похоже, что вы делаете здесь строковую манипуляцию, повторяющуюся на подстроке на одну меньшую.Это потенциально крайне неэффективно и опасно.Строки могут быть настолько длинными, что рекурсивный алгоритм разрушает стек, и поскольку строки неизменяемы, но не постоянны, вы создаете новую строку каждый раз, когда вызываете подстроку;это создаст минимум O (n ^ 2) байтов строк, которые необходимо скопировать вокруг.
(Кроме того, похоже, что вы делаете какой-то шаблон с самой длинной совпадающей подпоследовательностью;Вполне вероятно, что какая-то стратегия запоминания поможет справиться со сложностью времени, что часто делает с такой проблемой.)
Чтобы решить проблему размещения строк, вы можете обойти вместо строки,строка и индекс, который должен рассматриваться как начало строки.Теперь вы просто увеличиваете целое число, а не выделяете и копируете строку.
Чтобы решить проблему рекурсии, вы можете использовать ряд методов.Я написал серию статей о различных способах превращения простых рекурсивных алгоритмов в алгоритмы, которые используют кучу вместо пространства стека вызовов.Некоторые из них написаны на JScript, но идеи легко переносятся на C #.
Наконец, в C # 5 мы введем ключевое слово «await», которое заставляет компилятор выполнять преобразование стиля передачи продолжения в программе.,Цель этого ключевого слова - облегчить асинхронное программирование, но побочным эффектом этого является то, что оно значительно упрощает программирование без стеков.Если вам интересно, загрузите выпущенный нами предварительный выпуск Community Technology Preview, и вы можете автоматически преобразовать свою программу в программу, не требующую стека.
ОК, так что статьи по превращению рекурсивных алгоритмов в алгоритмы, которыепотреблять кучу, а не стек, начните здесь:
http://blogs.msdn.com/b/ericlippert/archive/2005/07/27/recursion-part-one-recursive-data-structures-and-functions.aspx
Все мои статьи о стиле прохождения продолжения здесь: (начинаются снизу)
http://blogs.msdn.com/b/ericlippert/archive/tags/continuation+passing+style/
А вот те, что на асинхронности, здесь: (опять же, начнем снизу)
http://blogs.msdn.com/b/ericlippert/archive/tags/async/