#include<iostream>
using namespace std;
//顺序栈
struct sqestack {
int* data;
int top;
//初始化
void Init() {
data = new int[100];
top = -1;
}
//输出
void Output() {
cout << "栈长" << top + 1 << endl;
if (top > -1)
{
cout << "内容:";
for (int i = 0; i < top; i++)
{
cout << data[i] << ",";
}
cout << endl;
}
}
//压栈
void Push(int value)
{
/*top++;
data[top] = value;*/
data[++top] = value;
}
//出栈
int Pop()
{
/*top--:
return data[top + 1];*/
return data[top--];
}
//判空
bool isEmpty()
{
return(-1 == top) ? true : false;
}
//栈顶到栈底输出栈的内容,但不出栈
void work(int start)
{
for (int i = top; i >= 0; i--)
{
start =start+data[i];
cout << "-" << start;
}
cout << endl;
}
};
//爬楼梯问题
int climb(int n, sqestack & S,int & num)//num每次都改变需要传值用取值符&num传递
{
//climb(0)==1
if (1 == n)
{
cout <<++num<< ":0-1";
S.work(1);
return 1;
}
if (0 == n)
{
cout << ++num << ":0";
S.work(0);
return 1;
}
S.Push(1);
int L = climb(n- 1, S,num);
S.Pop();
S.Push(2);
int R = climb(n - 2, S, num);
S.Pop();
return L + R;
}
int main()
{
sqestack myStack;
myStack.Init();
int num = 0;
int N;
cout << "请输入台阶数目:";
cin >> N;
cout <<"有"<< climb(N,myStack,num)<<"种走法";
cout << endl;
}