出栈序列问题

好好走路!

Q: N个元素依次进栈,则出栈有多少种方式?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;

int sum(int x,int y)
{
if(x==0)//读到在栈外元素为零时计数加一
return 1;
if(y==0)
return sum(x-1,y+1);//当栈为空时,只能入栈
else
return sum(x-1,y+1)+sum(x,y-1);//入栈和出栈操作都可以做
}

int main()
{
int N;
cin>>N;
cout<<sum(N,0);
return 0;
}

计数问题:答案为1N+1CNn\frac{1}{N+1}C^n_N (N=2n)(N=2n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//另一种情况下的写法,利用引用保存计数
void Counter(int sout,int sin,int &sum)
{
if(sout==0)
{
sum++;
return ;
}
else
{
Counter(sout-1,sin+1,sum);
}
if(sin>0)
Counter(sout,sin-1,sum);
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!