您的位置:首页 > 其它

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

2017-03-19 20:11 204 查看






我的解法如下:

/**
* 复杂递归的计算,这个好像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);
}

}这个算法运行时间模式不好,递归时没有利用前面的计算资源,不符合递归的第四原则:最佳合成效益原则。后续想办法再做改进。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: