C++求Fib数列

 更新时间:2016年02月27日 16:48:23   投稿:hebedich  
本文给大家汇总介绍了几种C++求Fib数列的方法,有需要的小伙伴们可以来参考下

1. 第一版本程序

int fib(int pos)
  {
    int elem = 1;
    int n1 = 1, n2 = 1;
    for (int i = 3; i <= pos; i++)
    {
      elem = n2 + n1;
      n1 = n2;
      n2 = elem;
    }
    return elem;
  }

2. 第二版本

bool fib(int pos, int &elem)
  {
    if(pos < 0 || pos > 1024)
    {
      elem = 0;
      return false;
    }
    elem = 1; //注意:定义只能有1次
    int n1 = 1, n2 = 1;
    for (int i = 3; i <= pos; i++)
    {
      elem = n2 + n1;
      n1 = n2;
      n2 = elem;
    }
    return true;
  }

主函数调用

int main()
  {  
      int pos;
    cout <<"Please enter a position: ";
    cin >> pos;
  
    int elem;
    if(fib(pos, elem))
    {
      cout << "element # " << pos
         << " is " << elem << endl;
    }
    else
      cout << "Sorry. Couldn't calculate element #"
         << pos <<endl;
  }

3. 第三版本 改进后的fib

const vector<int>* fib_new(int size)
  {
    const int max_size = 1024;
    static vector<int> elems;
  
    if(size <= 0 || size >= max_size)
    {
      cerr << "fib_new(): oops:invalid size:"
         << size << "-- can't fulfill request.\n";
      return 0;
    }
    for(int ix = elems.size(); ix < size; ix++)
    {
      if (ix == 0 || ix == 1)
        elems.push_back(1);
      else
        elems.push_back(elems[ix - 1] + elems[ix - 2]);
    }
    return &elems;
  }

主函数调用

    const vector<int> *result=fib_new(5);
    cout << result->back();
    
    const vector<int> *result=fib_new(5);
    cout << result->at(4)<< endl;
    //这个应该怎么多次调用返回,这个还没明白,留个记号。

最后这个版本可以避免进行重复运算,使用了局部静态对象。

相关文章

  • c++ 数据结构map的使用详解

    c++ 数据结构map的使用详解

    这篇文章主要介绍了c++ 数据结构map的使用详解,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下
    2021-04-04
  • 对比分析C语言中的gcvt()和ecvt()以及fcvt()函数

    对比分析C语言中的gcvt()和ecvt()以及fcvt()函数

    这篇文章主要介绍了对比分析C语言中的gcvt和ecvt以及fcvt函数,都是将数字转化为字符串,注意其之间的功能区别,需要的朋友可以参考下
    2015-08-08
  • C++中引用处理的基本方法

    C++中引用处理的基本方法

    引用不是新定义了一个变量,而是给已经存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,他和他引用的变量共用一块内存空间,下面这篇文章主要给大家介绍了关于C++中引用处理的基本方法,需要的朋友可以参考下
    2022-12-12
  • 基于C语言扫雷游戏的设计与实现

    基于C语言扫雷游戏的设计与实现

    大家好,本篇文章主要讲的是基于C语言扫雷游戏的设计与实现,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • c语言中static和extern的用法详细解析

    c语言中static和extern的用法详细解析

    以下是对c语言中static和extern的用法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-09-09
  • C语言16进制与ASCII字符相互转换

    C语言16进制与ASCII字符相互转换

    大家好,本篇文章主要讲的是C语言16进制与ASCII字符相互转换,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C++交换指针实例

    C++交换指针实例

    这篇文章主要介绍了C++交换指针实例,针对C与C++交换指针的方法进行了较为详细的对比分析,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • 详解c++11以正确的姿势输出enum class的值

    详解c++11以正确的姿势输出enum class的值

    这篇文章主要介绍了详解c++11以正确的姿势输出enum class的值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • C++静态成员函数和this指针详解

    C++静态成员函数和this指针详解

    这篇文章主要为大家介绍了C++静态成员函数和this指针,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • c++如何实现归并两个有序链表

    c++如何实现归并两个有序链表

    这篇文章主要介绍了c++如何实现归并两个有序链表,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07

最新评论