斐波那切數列: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;
}