最近学习了一些有关卡塔兰数的知识,但发现网上大多数求解算法都是采用递归的形式。
对于这个问题,递归形式求救算法的时间复杂度是指数形式的O(2^n),怎么才能消除递归呢?在
算法导论中的第15章有所涉及,根据书中的思想编写了如下算法:
public static int catalanNumber(int n){
int[] arr=new int[n+1];
arr[1]=1;
for(int i=2;i<n+1;i++){
arr[i]=0;
for(int j=1;j<i;j++)
arr[i]+=arr[j]*arr[i-j];
}
return arr[n];
}
算法的时间复杂度为O(n^2), 空间复杂度为O(n).