#include <iostream>
#include <stack>
#define MAX_STEP 15
bool nextStep(int step, int totalStep, unsigned long long &count, std::stack<int> &steps)
{
steps.push(step);
if (totalStep + step == MAX_STEP)
{
std::stack<int> temp;
while (!steps.empty())
{
std::cout << steps.top() << " ";
temp.push(steps.top());
steps.pop();
}
while (!temp.empty())
{
steps.push(temp.top());
temp.pop();
}
//std::cout << steps.size() << std::endl;
std::cout << std::endl;
count++;
return true;
}
else if (totalStep + step > MAX_STEP)
{
return false;
}
else
{
totalStep += step;
nextStep(1, totalStep, count, steps);
steps.pop();
nextStep(2, totalStep, count, steps);
steps.pop();
}
}
int main()
{
std::stack<int> steps;
unsigned long long count = 0;
nextStep(1, 0, count, steps);
steps.pop();
nextStep(2, 0, count, steps);
steps.pop();
std::cout << "all count" << count << std::endl;
std::getchar();
}
#include <stack>
#define MAX_STEP 15
bool nextStep(int step, int totalStep, unsigned long long &count, std::stack<int> &steps)
{
steps.push(step);
if (totalStep + step == MAX_STEP)
{
std::stack<int> temp;
while (!steps.empty())
{
std::cout << steps.top() << " ";
temp.push(steps.top());
steps.pop();
}
while (!temp.empty())
{
steps.push(temp.top());
temp.pop();
}
//std::cout << steps.size() << std::endl;
std::cout << std::endl;
count++;
return true;
}
else if (totalStep + step > MAX_STEP)
{
return false;
}
else
{
totalStep += step;
nextStep(1, totalStep, count, steps);
steps.pop();
nextStep(2, totalStep, count, steps);
steps.pop();
}
}
int main()
{
std::stack<int> steps;
unsigned long long count = 0;
nextStep(1, 0, count, steps);
steps.pop();
nextStep(2, 0, count, steps);
steps.pop();
std::cout << "all count" << count << std::endl;
std::getchar();
}