斐波那契数列:1 1 2 3 5 8 13………(n的值为n前两项相加的和)
实现:
int fun(int n)
{
int a = 1, b = 1, c = 1;
for (int i = 3; i <= n; ++i)
{
c = a + b;
b = a;
a = c;
}
return c;
}
递归实现:
int num = 0;
int fun(int n)
{
num += 1; //调用的次数
if (n <= 2)
{
return 1;
}
else return fun(n - 1) + fun(n - 2);
}
int main()
{
int sum = fun(10);
cout << sum << endl;
cout << num << endl;
}
由于第10项由第9项和第8项得出,第9项由第8项和第7项得出,第8项由第7项和第6项得出,所以第7项需要计算两次,当数据规模大到一定程度上时,递归重复的次数会很多,所以递归优化的方法如下:
int fac(int n,int a,int b)
{
if (n <= 2)
{
return a;
}
else
{
return fac(n - 1, a + b, a);
}
}
int fun(int n)
{
int a = 1;
int b = 1;
return fac(n, a, b);
}
int main()
{
for (int i = 0; i < 10; ++i)
{
cout << i << "->" << fun(i) << endl;
}
return 0;
}