Это действительно зависит от того, какой рекурсивный алгоритм вы используете. Если это простая рекурсия, вы можете сделать что-то вроде этого:
public int CalculateSomethingRecursively(int someNumber)
{
return doSomethingRecursively(someNumber, 0);
}
private int doSomethingRecursively(int someNumber, int level)
{
if (level >= MAX_LEVEL || !shouldKeepCalculating(someNumber))
return someNumber;
return doSomethingRecursively(someNumber, level + 1);
}
Стоит отметить, что этот подход действительно полезен только тогда, когда уровень рекурсии можно определить как логический предел. В случае, если это не может произойти (например, алгоритм «разделяй и властвуй»), вам придется решить, как вы хотите сбалансировать простоту и производительность с ограничениями ресурсов. В этих случаях вам, возможно, придется переключаться между методами, как только вы достигнете произвольно заданного предела. Эффективный способ сделать это, который я использовал в алгоритме быстрой сортировки, - сделать это как отношение к общему размеру списка. В этом случае логический предел является результатом того, что условия больше не являются оптимальными.