/*斐波那契数列:
经典数学问题之一;斐波那契数列,又称黄金分割数列,指的是这样一个数列:
1、1、2、3、5、8、13、21、……
想必看到这个数列大家很容易的就推算出来后面好几项的值,那么到底有什么规律,简单说,就是前两项的和是第三项的值,也许你会想到的是迭代,也学你想到的是递归。
f(n) = f(n-1) + f(n-2);
*/
#include <iostream>
using namespace std;
int n1 = 0;//记录普通的递归次数
int n2 = 0;//优化的递归次数
//普通递归函数,默认斐波那契数列的第一项为1,第二项为1
int Fibonacci1(int n)
{
n1++;
if (n <= 2)//递归出口
{
return 1;
}
return Fibonacci1(n - 1) + Fibonacci1(n - 2);
}
//优化后的递归函数,默认斐波那契数列的第一项为a,第二项为b
int Fibonacci2(int a, int b, int n)
{
n2++;
if (n > 2)
{
return Fibonacci2(a + b, a, n - 1);
}
else if (n = 2)
{
return b;
}
return a;
}
int main()
{
int n;
std::cout << "输入数据: ";
std::cin >> n;
std::cout << "Fibonacci1(" << n << ")=" << Fibonacci1(n) << ", counter1=" << n1 << std::endl;
std::cout << "Fibonacci2(" << n << ")=" << Fibonacci2(1,2,n) << ", counter2=" << n2 << std::endl;
while ('a' != getchar());
return 0;
}