日期:2014-05-18  浏览次数:20819 次

一个简单的算法题~~~谢谢
/*
  * 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
本来那个数就是越往后越大的。
------解决方案--------------------
看到下划线 我就晕!