得到递推公式
f[k]=0;
for(int x=0;x<=k-1;x++){
f[k]+=(f[k-x]+1);
}
推导过程如下:假设有k个元素要进栈,这k个数的前面k-1个数已经进栈了一次(先不管有没有弹出来),那么当第k个元素(就是最后一个元素)要进栈时:
(初始化设f[k]=0)
一、若栈里面有k-1个元素,则(1)先把这k-1个元素弹出来,有f[k-1]种,或(2)直接把第k个元素放进去,再全弹出来,有1种——综合(1)(2)得到f[k]+=f[k-1]+1;
二、若栈里面有k-2个元素,则(1)先把这k-2个元素弹出来,有f[k-2]种,或(2)直接把第k个元素放进去,再全弹出来,有1种——综合(1)(2)得到f[k]+=f[k-2]+1;
三、同理,若栈里面有k-x个元素,则(1)先把这k-x个元素弹出来,有f[k-x]种,或(2)直接把第k个元素放进去,再全弹出来,有1种——综合(1)(2)得到f[k]+=f[k-x]+1;
结论:得到递推公式
f[k]=0;
for(int x=0;x<=k-1;x++){
f[k]+=(f[k-x]+1);
}