我们用一道非常常见的面试题来开始这个话题:编写函数,打印出斐波那契数列的第n项。
相信很多朋友都会用递归的方法来求解该题,我们下面就来分析一下这种发放的优劣。
使用递归的求解方法
代码片段
#include <stdio.h>
//函数
int fun(int n)
{
if(n==1||n==2)
return 1;
else
return fun(n-1)+fun(n-2);
}
//主体
int main()
{
//求斐波那契数列的第10项的值
printf("%d",fun(10));
return 1;
}
分析
上面这种解决方法有一个致命缺陷,递归函数的调用非常消耗堆栈资源。
我们先来看一下上面程序运行时的堆栈调用情况:
大家可以发现,在峰值时程序开辟了10个fun函数的调用堆栈。
按照这种情况,如果求第1000项