题目描述
求斐波那契数列的第 n 项,n <= 39。
思路解析:两种方式
1.利用公式求取每一个f(n)的值,并利用一个n+1的数组来存储每一个f(n)的值,此方法空间复杂度为O(n)
2.利用两个变量存储f(n-1)和f(n-2)的值,利用公式f(n)=f(n-1)+f(n-2),并不断更新f(n-1)与f(n-2)的值,此方法空间复杂度为O(1)
/// <summary>
/// 对n的值进行求取,并存放到数组中,利用公式发f(n)=f(n-1)+f(n-2),空间复杂度为O(n)
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
public int Fibonacci1(int n)
{
if (n<=1)
{
return n;
}
int[] fib=new int[n+1];
fib[0] = 0;
fib[1] = 1;
for (int i = 2; i <=n; i++)
{
fib[i] = fib[i - 1] + fib[i - 2];
}
return fib[n];
}
/// <summary>
/// 此方法利用两变量存储n-1和n-2项的值,通过n-1与n-2的值即可求出n的值,空间复杂度为O(1)
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
public int Fibonacci2(int n)
{
if (n<=1)
{
return n;
}
int pre = 0, cur = 1;
int fib = 0;
for (int i = 2; i <=n; i++)
{
fib = pre + cur;
pre = cur;
cur = fib;
}
return fib;
}