Cómo encontrar diferentes permutaciones de pila

Este problema es similar a enumerar todas las expresiones correctamente emparejadas que contienen par ‘n’ de paréntesis.
Se puede resolver fácilmente usando recursividad y retroceso.

Aquí está mi solución para este problema:

//Computing all stack permutations for the range [1, rangeMax] void enumeratePermutationsAux(int rangeMax, int &pushCount, int &popCount) { static std::stack st; static std::vector output(rangeMax, 0); if(pushCount == rangeMax && popCount == rangeMax) { for(int i = 0; i < rangeMax; ++i) std::cout << output[i] << ' '; std::cout<<"\n"; } else { if(pushCount  popCount) { int tmp = st.top(); output[popCount] = tmp; st.pop(); popCount ++; enumeratePermutationsAux(rangeMax, pushCount, popCount); st.push(tmp); popCount --; } } } void enumeratePermutations(int rangeMax) { int pushCount = 0, popCount = 0; enumeratePermutationsAux(rangeMax, pushCount, popCount); } 

Esta es una pregunta matemática que se responde en el libro.