2008年8月10日星期日

高二数学作业某题关于斐波那契数列

20:1,1,2,3,5,8,13……这一列数的的规律是第一第二个数是1,从第三个树开起,该数是其前面两个数之和,试用循环语句描述,计算这列数中前20个数之和的算法。

题目看完了,偶雷到了- -!。这明显是斐波那契数列嘛,居然还让我用循环来求。

不过这个也情有可原,我们数学高二的算法没教函数,而且用的是类似QBASIC的BASIC,偶那个寒呐~既然他让写,我也不和他废话。

不过上校抛弃VB6了,更别说BASIC,既然是真正的写代码,就用C++好了。顺便里面夹杂个递归的~

修改日期:2008-8-10
--------------------------------------------------
// 求前20个斐波那契数列之和
// 数学作业要求(C++)版
 
#include <conio.h>
#include <iostream>
#include "SolveHead.h"
using namespace std;
 
int main()
{
 // 1,1,2,3,5……
 // j是两个数中左边的数,k是右边的数
 // T是两个数之和
 // s为所有数的综合
 int i = 1, j = 1, k = 1, T = 0, s = 2;
  
 while (i <= 18)
 {
  T = k + j; // 新数字
  j = k; // 交换
  k = T;
  s += k;  // 求和
  i++; 
 }
   
 cout<<"前20个斐波那契数列之和为:"<<s<<endl;
 
 cout<<endl<<"Press any key to exit!"<<endl;
 getch();
  return 0;
}
 
--------------------------------------------------
// 递归版
 
#include <conio.h>
#include <iostream>
#include "SolveHead.h"
using namespace std;
 
int Fun(int Num);
 
int main()
{
 int s = 0;
 
 for (int n = 1; n <= 20; n++)
 {
  s += Fun(n); 
 }
   
 cout<<"前20个斐波那契数列之和为:"<<s<<endl;
 
 cout<<endl<<"Press any key to exit!"<<endl;
 getch();
  return 0;
}
 
int Fun(int Num)
{
 if ( 2 == Num || 1 == Num)
 {
  return 1;
 }
 else
 {
   return Fun(Num - 1) + Fun(Num - 2);
 }
}

2 条评论:

1、可以使用<b>、<i>、<a>等Html标志,让评论更有特色...
2、支持OpenID登录,技术达到国际先进水平。但切记,评论内容不代表本站观点!
3、当遇到“连接被重置”、“连接超时”和“此网页无法访问”等而发表不了评论的话,请多刷新几次页面,或迟三分钟后再试;
4、对你的浏览造成不便,站长在此代表全国G.FW工作人员向你鞠躬致歉!!!