扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
谈到斐波那契数列
成都做网站、成都网站建设的关注点不是能为您做些什么网站,而是怎么做网站,有没有做好网站,给创新互联建站一个展示的机会来证明自己,这并不会花费您太多时间,或许会给您带来新的灵感和惊喜。面向用户友好,注重用户体验,一切以用户为中心。常想到的是递归,由于在电脑中存储数据是开辟栈来存储,若是所要计算的值太大,要面对两个问题,一个是时间问题:对一数的计算,递归和回溯过程中会重复对一个值(例如f(3))进行开辟空间释放空间,因而会十分耗时;另一个问题是空间问题:由于系统分给程序的栈空间是有限的,当数字太大,最终产生的栈空间的情况,即栈溢出,导致我们无法计算。
第二个想到的是通过数组来存储,即将每一个计算后的值都存到数组里,虽然解决了在时间上的问题,但也会出现栈溢出,无法计算大的斐波那契数。
为了解决大数问题同时提高时间上的效率我们采用迭代的方法(实际上通过循环来实现)。
下面为其代码描述:
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int main()
{
int number;
int first, second, third;
scanf("%d", &number);
first = 1;
second = 1;
if (number < 3)
third = 1;
while (number >= 3)
{
third = first + second;
first = second;
second = third;
number--;
}
printf("%d\n", third);
system("pause");
return 0;
}
在Linux操作系统下可看出两者计算同一个f(n)迭代所需要的时间比递归所需要的时间要少的多多多。。而且所求的数多大都可以,因为没有限制,只是进行加法和赋值运算,也没有需要很多的空间。
通过该例子,可发现迭代的实现往往比递归实现效率高,但并不是递归就没有自身的优点。
递归相当于其他方法,他的可读性很高,另外当一个问题很复杂时,使用迭代或其他方法会很难实现(例如Hanoi问题,青蛙跳台阶问题)此时用递归思想可以将问题简洁明了的解决,这样就补偿了他所带来的运行时开销。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流