Вы можете использовать локальную статическую переменную, если вас не волнует безопасность потоков.
Хотя, это даст вам правильный счет только при первом запуске вашей рекурсивной программы. Лучшим методом будет класс защиты типа RAII, который содержит внутреннюю статическую переменную. В начале рекурсивной процедуры создайте класс защиты. Конструктор будет увеличивать внутреннюю статическую переменную, а деструктор уменьшать ее. Таким образом, при создании нового стекового кадра счетчик увеличивается на единицу, а при возврате из каждого стекового кадра счетчик уменьшается на единицу.
struct recursion_guard
{
recursion_guard() { ++counter; }
~recursion_guard() { --counter; }
static int counter;
};
int recursion_guard::counter = 0;
void recurse(int x)
{
recursion_guard rg;
if (x > 10) return;
recurse(x + 1);
}
int main()
{
recurse(0);
recurse(0);
}
Обратите внимание, что это все еще не потокобезопасно. Если вам нужна безопасность потоков, вы можете заменить переменную static-storage на переменную thread-local-storage, используя boost::thread_specific_ptr
или локальные средства потока C ++ 0x.