一个简单的算法题~~~谢谢
/*
* X(n)=(X(n-l)+X(n-k))%m where l>k>0, and m>0
* where X(0)...X(1) are pre-defined(i.e.They are seed values.)
*
*/
题目如上,就是一个变形 斐波拉契数函数 形式,用来产生随机数的。
我的代码如下:
public static int LFGs2(int _theFirstLagNumber, int _theSecondLagNumber, int _theModNumber,int _number,params int[] _theSeed)
//_theFirstLagNumber 是第一个滞后数
//_theSecondLagNumber 是第二个滞后数
//_theModNumber 是模数
//_number 是 我要计算的数
//_theSeed 是种子数
//eg:LFGs2(4, 3, 10, 10, 1, 2, 3, 4);
{
if (_number < _theSeed.Length)
{
return _theSeed[_number];
}
else
{
if (_number < _array.Length&& _array[_number] !=-1)
{
return _array[_number];
}
else
{
return (LFGs2(_theFirstLagNumber, _theSecondLagNumber, _theModNumber, _number - _theFirstLagNumber, _array, _theSeed) + LFGs2(_theFirstLagNumber, _theSecondLagNumber, _theModNumber, _number - _theSecondLagNumber, _array, _theSeed)) % _theModNumber;
}
}
}
我从X(1)一致算到X(100)的时候,X(100)和更大的数字的时候,需要很长的时间才能计算出结果~~~请哪位朋友可以帮我改进下算法~~~可以让它更快算出来,谢谢~~~
------解决方案--------------------友情UP
------解决方案--------------------只能帮你顶上去
------解决方案--------------------把方法完整的帖出来,大家好看懂些哦
mark up
------解决方案--------------------mark
有情up
本来那个数就是越往后越大的。
------解决方案--------------------看到下划线 我就晕!