C++求Fib数列
1.第一版本程序
intfib(intpos) { intelem=1; intn1=1,n2=1; for(inti=3;i<=pos;i++) { elem=n2+n1; n1=n2; n2=elem; } returnelem; }
2.第二版本
boolfib(intpos,int&elem) { if(pos<0||pos>1024) { elem=0; returnfalse; } elem=1;//注意:定义只能有1次 intn1=1,n2=1; for(inti=3;i<=pos;i++) { elem=n2+n1; n1=n2; n2=elem; } returntrue; }
主函数调用
intmain() { intpos; cout<<"Pleaseenteraposition:"; cin>>pos; intelem; if(fib(pos,elem)) { cout<<"element#"<<pos <<"is"<<elem<<endl; } else cout<<"Sorry.Couldn'tcalculateelement#" <<pos<<endl; }
3.第三版本改进后的fib
constvector<int>*fib_new(intsize) { constintmax_size=1024; staticvector<int>elems; if(size<=0||size>=max_size) { cerr<<"fib_new():oops:invalidsize:" <<size<<"--can'tfulfillrequest.\n"; return0; } for(intix=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; }
主函数调用
constvector<int>*result=fib_new(5); cout<<result->back(); constvector<int>*result=fib_new(5); cout<<result->at(4)<<endl; //这个应该怎么多次调用返回,这个还没明白,留个记号。
最后这个版本可以避免进行重复运算,使用了局部静态对象。