斐波那切数列:An = A(n-1)+A(n-2) n>2 , A1=A2=1
程序本身 没什么难度。代码在VS2010下调试通过。
详情 看函数注释了 。#include <iostream>
#include <iomanip>
using namespace std;
/*计算数列,并将结果放入参数内存中*/
bool Fibonacci(int* pBuffer, int num)
{
int a1 = 1;
int a2 = 1;
int temp = 0;
if(num<2 || pBuffer==NULL)
return false;
try
{
pBuffer[0] = a1;
pBuffer[1] = a2;
for(int index=2; index<num; index++)
{
pBuffer[index] = pBuffer[index-1]+pBuffer[index-2];
if(*(pBuffer+index)<0)
{
pBuffer[index] = 0;
return true;
}
}
}
catch(exception e)
{
return false;
}
return true;
}
/*打印数列,宽度8,如果在参数指定数值长度内遇到0,说明计算溢出,有效结果结束*/
void PrintNums(int* pBuffer, int num)
{
cout<<setw(8);
try
{
for(int i=0; i<num; i++)
{
if(*(pBuffer+i)==0)
{
cout<<endl<<"结果溢出"<<endl;
break;
}
else
cout<<*(pBuffer+i)<<" ";
}
}
catch(exception e)
{
return;
}
}
/*从主程序中分离出来的业务逻辑,主要是界面*/
void CalculateFunc()
{
int num=0;
int* pBuffer = NULL;
cout<<endl<<"请输入数列长度:";
cin>>num;
if(num<2)
{
cout<<endl<<"长度不得小于2"<<endl;
return;
}
pBuffer = new int[num];
if(pBuffer == NULL)
{
cout<<endl<<"内存分配失败"<<endl;
return;
}
memset(pBuffer, 0, num*sizeof(int));
if(Fibonacci(pBuffer, num))
{
PrintNums(pBuffer, num);
}
delete pBuffer;
pBuffer = NULL;
return;
}
int main()
{
int num = 0;
while(true)
{
cout<<"\n功能选择:"<<endl;
cout<<"\t1.计算斐波那切数列"<<endl;
cout<<"\t2.退出程序"<<endl;
cin>>num;
if(num!=1 && num!=2)
{
cout<<"请重新选择"<<endl;
continue;
}
if(num==1)
{
CalculateFunc();
continue;
}
else if(num==2)
{
break;
}
}
return 1;
}