温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

斐波那契列数列的递归与迭代

发布时间:2020-06-11 06:57:02 来源:网络 阅读:175 作者:flag不会倒 栏目:编程语言

谈到斐波那契数列

  • 常想到的是递归,由于在电脑中存储数据是开辟栈来存储,若是所要计算的值太大,要面对两个问题,一个是时间问题:对一数的计算,递归和回溯过程中会重复对一个值(例如f(3))进行开辟空间释放空间,因而会十分耗时;另一个问题是空间问题:由于系统分给程序的栈空间是有限的,当数字太大,最终产生的栈空间的情况,即栈溢出,导致我们无法计算。

  • 第二个想到的是通过数组来存储,即将每一个计算后的值都存到数组里,虽然解决了在时间上的问题,但也会出现栈溢出,无法计算大的斐波那契数。

为了解决大数问题同时提高时间上的效率我们采用迭代的方法(实际上通过循环来实现)。
下面为其代码描述:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
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问题,青蛙跳台阶问题)此时用递归思想可以将问题简洁明了的解决,这样就补偿了他所带来的运行时开销。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI