加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C++求Fib数列

发布时间:2020-12-16 05:36:46 所属栏目:百科 来源:网络整理
导读: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 lt; 0 || pos 1024) { elem = 0; return false; } elem =

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;
    //这个应该怎么多次调用返回,这个还没明白,留个记号。

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读