#include <iostream>
#include <string.h>
using namespace std;
//迭代法,时间复杂度O(n),空间复杂度O(1)
int iterator_Fibonacci(int n)
{
if (n < 2)
return n;
int lo = 0;
int hi = 1;
int sum = 0;
for (int i = 2; i < n + 1; i++)
{
sum = lo + hi;
lo = hi;
hi = sum;
}
return sum;
}
//去重递归,时间复杂度O(n),空间复杂度O(n)
int single_recursion(int *pArray, int n)
{
if (n == 0 || n == 1)
{
return n;
}
if (pArray[n] != 0)
{
return pArray[n];
}
pArray[n] = single_recursion(pArray, n - 1) + single_recursion(pArray, n - 2);
return pArray[n];
}
int Fibonacci(int n)
{
int array[n + 1] = {0};
return single_recursion(array, n);
}
int main() {
int res = iterator_Fibonacci(18);
cout << "value is " << res << endl;
res = Fibonacci(18);
cout << "value is " << res << endl;
return 0;
}