首页 > 学院 > 开发设计 > 正文

二项分布的递归实现

2019-11-08 01:18:31
字体:
来源:转载
供稿:网友

递归实现二项分布:

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)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表