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; //这个应该怎么多次调用返回,这个还没明白,留个记号。
最后这个版本可以避免进行重复运算,使用了局部静态对象。