日期:2014-05-19  浏览次数:20834 次

一个小函数参数到100就不行了,如何优化?
function   getloop(i)
  {
  if   (i==1)
  return   1;

  if   (i==2)
  return   2;

  return   getloop(i-1)   +     getloop(i-2);
  }

------解决方案--------------------
递归也可以优化的 :)
const int SIZE = 100;
static double[] cache = new double[SIZE];
static double Fibo(int n)
{
if (n == 1 || n == 2)
{
Console.WriteLine( "{0} : {1} ", n, 1);
return 1;
}
double n1, n2;
cache[n - 1] = n1 = (cache[n - 1] != 0) ? cache[n - 1] : Fibo(n - 1);
cache[n - 2] = n2 = (cache[n - 2] != 0) ? cache[n - 2] : Fibo(n - 2);

double result = n1 + n2;
Console.WriteLine( "{0} : {1} ", n, result);
return result;
}

static void Main(string[] args)
{
Fibo(SIZE);
}
------解决方案--------------------
static void Main(string[] args)
{
long lstart = DateTime.Now.Millisecond;
BigInteger v;

v = fib(100);

long lstop = DateTime.Now.Millisecond;
Console.WriteLine( "fib输入100,输出{0},耗时:{1} ", v, lstop - lstart);

Console.ReadLine();

}

public static BigInteger fib(int no)
{
BigInteger[] arr = new BigInteger[no];
arr[0] = new BigInteger (1);
arr[1] = arr[0];
for (long i = 2; i < no; i++)
{
arr[i] = arr[i - 1] + arr[i - 2];
}
return arr[no - 1];
}


fib输入100,输出354224848179261915075,耗时:0