腾讯面试题

给一系列的数1,2,3,,,n(有序的)和一个栈(stack),这个栈无线大,将这n个数据按照顺序放入栈中,但是随机的从栈中弹出,n=5,一共有多少中弹栈方式。

分析:卡特兰数的典型应用

  这是卡特兰数的典型应用,Catalan数的定义令h(1)=1,Catalan数满足递归式:h(n)=h(1)*h(n-1) + h(2)*h(n-2)+…+h(n-1)h(1),n >= 2该递归关系的解:h(n) = C(2n,n)/(n+1),n=1,2,3…(其余C(2n,n)表示2n个中取n个的组和数)h(5) = C(10,5)/6 = 42

参考:这里

  参考中有应用和性质

代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int GetPopNum(int n)
 4 {
 5     int sum = 0 ,i;
 6     if(n == 0 || n == 1)
 7         return 1;
 8     for(i = 1;i <= n;i++)
 9     {
10         sum+=GetPopNum(i-1) * GetPopNum(n-i);
11     }
12     return sum;
13 }
14 int main()
15 {
16     int k = GetPopNum(5);
17     printf("%d",k);
18 }
View Code
原文地址:https://www.cnblogs.com/sxmcACM/p/4768721.html