//求第n个斐波那契数
nt Fib(int n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d", &n);
ret = Fib(n);
printf("%d\n", ret);
return 0;
}
//但当我们求第50个的时候发现特别耗费时间
//我们如何解决呢?
//将递归改为非递归
//使用static对象替代nonstatic局部对象。
//将上述代码改为下述
int Fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while (n > 2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
提示:
1.许多问题是以递归的形式进行解释的,这只是因为它比非递归的形式更为清晰。
2.当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所带来的运行时的开销。