C++ 재귀함수를 바꾸려고 하는데요.

DarkSide의 이미지

void recursive_func(int p0, int p1)
{
    int p2 = test(p0, p1);
    if(p2 == p1) return; //종료
 
    Do_it(p0, p1, p2);
 
    recursive_func(p0, p2);
    recursive_func(p2, p1);
}

위 코드가 리눅스에서는 실행이 잘되었는데, 윈도에서는 스택 깊이 때문인지 에러가 많이 납니다.
재귀를 쓰지 않고 실행하는 방법이 있을까요?
종료 조건은 반드시 만나게 되어 있습니다.
한 함수에서 두 개로 분지되다 보니 해결책이 떠오르질 않네요.

sliver의 이미지

아래처럼 직접 스택을 써서 재귀를 구현하면 되지 않을까요..

void func(int p0, int p1)
{
  typedef pair<int,int> p;
  stack<p> s;
  s.push(p(p0, p1));
  while(!s.empty()) {
    p x = s.top();
    s.pop();
    int p0 = x.first;
    int p1 = x.second;
    int p2 = test(p0, p1);
    if(p2 != p1) {
      Do_it(p0, p1, p2);
      s.push(p(p0,p2));
      s.push(p(p2,p1));
    }
  }
}
DarkSide의 이미지

감사합니다.