先来看一下Fibonacci序列的定义:
F(n) = 1, n = 0 或 1
F(n) = F(n - 1) + F(n - 2) , n > 1
一般情况下,我们都喜欢采用递归方法计算Fibonacci数列,像下面这样的代码:
int f(int n)
{
if(n <= 1)
{
return 1;
}
return f(n - 1) + f(n - 2);
}
这种实现方法在n之比较小的时候还是可以接受的,但是在n之特别大时电脑就吃不消了。这时候可以采用空间换时间的方法来计算Fibonacci数列,改进后的方法如下:
int arr[40];
int f(int n)
{
int result;
if(n <= 1)
{
result = 1;
}
else
{
result = arr[n-1] + arr[n-2];
}
arr[n] = result;
return result;
}
改进后的代码使用了一个数组,将F的值缓存起来,这样计算F(n)=F(n-1)+F(n-2)时就不需要递归执行,直接从数组中取值相加即可。