递归实现二项分布:
public static double binomial(int N,int k,double p){ if(N==0&&k==0) return 1.0; if(N<0||k<0) return 0.0; return (1-p)*binomial(N-1,k,p)+p*binomial(N-1,k-1,p);}原理: (N,k)p^k*(1-p)^(N-k)=(1-p)[(N-1,k)p^k*(1-p)^(N-1-k)]+p[(N-1,k-1)p^(k-1)*(1-p)^(N-k)]问题: 当参数中int过大时,递归调用次数较多,花费时间较长
改进实现(放弃递归):
public static double binomial(int N,int k,double p){ int m=1,s=1; for(int i=N;i>(N-k);i--) m*=i; for(int j=k;j>0;j--) s*=j; return m/s*Math.pow(p, k)*Math.pow((1-p), (N-k));}原理:P(ξ=k)=C(N,k)*p^k*(1-p)^(n-k)
新闻热点
疑难解答