一个复杂加和公式的递归算法



我的解法如下:

	/**
	 * 复杂递归的计算,这个好像O(n^n)
	 * 用来计算上面那个公式的方法
	 * @param num 
	 * @return
	 */
	public double getResult(int num)
	{
		//递归出口,即N=0时,公式的和
		if(num == 0)
		{
			return 4.0 / 3;
		}
		double sum = 0;
		//这里进行递归
		//这里并不好,因为每个不同的整数i都要独立计算,没有利用前面i-1的计算资源
		//所以算法运行时间过长
		for(int i = 0; i < num; i++)
		{
			sum += this.combine(i, num) * getResult(i);
		}
		return sum / 3;
	}
	/**
	 * 递归方法求组合数
	 * @param up 上标 
	 * @param down 下标
	 * @return
	 */
	public int combine(int up, int down)
	{
		//1.递归出口
		if(up == 0)
		{
			return 1;
		}
		//2.小于一半时进入递归
		if(up <= down / 2)
		{
			return (down - up + 1) / up * combine(up - 1, down);
		}
		//3.大于一半时,可以将其化为小于一半的请款
		//以节省计算资源
		else
		{
			return combine(down - up, down);
		}
		
	}
这个算法运行时间模式不好,递归时没有利用前面的计算资源,不符合递归的第四原则:最佳合成效益原则。后续想办法再做改进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值