编写程序,求菲波那契数列前 15 项的平方和,C++的!谁给我答案啊 速度

如题所述

第1个回答  2013-12-04
首先,菲波那契数列用递归方法实现是非常低效率的解法,因为在递归的过程中,有很多结果被重新计算了,比如计算f(4)的时候要用到f(3)和f(2)的结果,而计算f(3)的时候又要用f(2)和f(1)的结果,这样f(2)就被递归重复计算了。其次,由于要计算前15项的平方和,而每一项只和自己的前面2项有关系,所以,不必记录所有的15项的值,只需要记录当前值和前两项值即可,然后直接累加到和上面。 以下是解法: int prev1 = 1; //初始化第一项为1
int prev2 = 1; //初始化第二项为1
int sum = prev1 * prev1 + prev2 * prev2; //初始化和为前两项和

for (int i = 0; i < 13; i++) //计算前15项,还有13项没有累计
{
int cur = prev1 + prev2; //计算后续项
sum += cur * cur; //累加和
prev1 = prev2;
prev2 = cur;
}
循环结束后sum为答案。
第2个回答  2013-12-04
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double num[15],sum=0;
num[0]=num[1]=1;//定义数列的前两项的值
for(int i=2;i<15;i++)
{
num[i]=num[i-1]+num[i-2];//定义数列第3项到第15项的值
}
int i=0;
while(i<15)
{
cout<<"数列的第一项为:"<<num[i]<<endl;//输出数列前15项的值
i++;
}
i=0;
while(i<15)//用循环相加数列前15项平方的和
{
sum+=pow(num[i],2);
i++;
}
cout<<"数列前15项平方的和是:"<<sum<<endl;//输出和
return 0;
}
第3个回答  2013-12-04
你好 这个程序这样写你看看啊#include<iostream.h>static long GetNumberAtPos(long pos);void main()
{ int i, n;
long y;
cout<<"input the number:\n";
cin>>n;
for(i=0;i<n+1;i++)
{y=GetNumberAtPos(i);
cout<<"result is:\n"<<"�0�8�0�3"<<i<<"�0�0�0�2�0�8�0�5:\n"<<y<<endl;
}

}
static long GetNumberAtPos(long pos)
{long res;
if (pos==0||pos==1)
return 1;
res=GetNumberAtPos(pos-1)+GetNumberAtPos(pos-2);
return res;
} 希望对你有帮助!本回答被网友采纳
相似回答