二项分布的递归实现

递归实现二项分布:

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值