在编程语言的学习中,我们学习过不少的算法,比如累加,累乘,数值交换,排序等等。在一些软件比赛和面试题中,有一类算法不容忽视,属于高频题目,我之前去企业面试的时候就遇到这样的一类题目,题目不算难,掌握方法,很快可以做出来。这类算法叫做----级数算法。

级数计算的关键是“描述出通项”,而通项的描述法有两种:一为直接法、二为间接法又称递推法。

直接法的要领是:利用项次直接写出通项式;递推法的要领是:利用前一个(或多个)通项写出后一个通项。

可以用直接法描述通项的级数计算例子有:

(1)1+2+3+4+5+……

(2)1+1/2+1/3+1/4+1/5+……等等。

可以用间接法描述通项的级数计算例子有:

(1)1+1/2+2/3+3/5+5/8+8/13+……

(2)1+1/2!+1/3!+1/4! +1/5!+……等等。

(1)直接法求通项

打个比方,我写段代码:

例1、求1+1/2+1/3+1/4+1/5+……+1/100的和。

#include <stdio.h>

int main(void)
{
  float s; int i;
  s=0.0;   //程序中是利用项次的倒数直接描述出每一项,并进行累加。注意:因为是整数,所以分子必须写成浮点数1.0的形式
  for(i=1;i<=100;i++)
  {
  	s=s+1.0/i ;
  }
  printf("1+1/2+1/3+...+1/100=%f\n",s);
  return 0 ;
}

运行结果:

例2:间接法求通项

这种方法也叫做递推法

例如:

计算下列式子前20项的和:1+1/2+2/3+3/5+5/8+8/13+……。

#include <stdio.h>

int main(void)
{
  float sum,fz,fm,t,fz1;  int i;
  sum=1;        /*先将第一项的值赋给累加器s*/
  fz=1;fm=2;
  t=fz/fm;    /*将待加的第二项存入t中*/
	 for(i=2;i<=20;i++)
	 {
	 	  sum=sum+t;
	      /*以下求下一项的分子分母*/
	      fz1=fz;     /*将前项分子值保存到fz1中*/
	      fz=fm;      /*后项分子等于前项分母*/
	      fm=fz1+fm;  /*后项分母等于前项分子、分母之和*/
	  t=fz/fm;
	 }
  printf("1+1/2+2/3+...=%f\n",sum);
}

运行结果:

例三:计算级数的值,当通项的绝对值小于eps时计算停止。

#include <stdio.h>
#include <math.h>
//求出最终的结果
float result(float x,float eps);
int main(void)
{
  float x,eps;
  scanf("%f%f",&x,&eps);
  printf("\n%f,%f\n",x,result(x,eps));
  return 0 ;
}

float result(float x,float eps)
{
  int n=1;float s,t;
  s=1;  t=1;
	 do {    //以下t为递推算法部分
	        t=t*x/(2*n);
	        s=s+(n*n+1)*t;
	        n++;
	 }while(fabs(t)>eps);
 return s;
}

运行结果:

最新文章

  1. 数据结构与算法JavaScript (一) 栈
  2. Buffer cache hit ratio性能计数器真的可以作为内存瓶颈的判断指标吗?
  3. W3School-CSS 列表实例
  4. JS操作页面
  5. JDK中的Timer和TimerTask详解(zhuan)
  6. Keil AGDI Header File
  7. C#实现斐波那契数列求和
  8. MySQL通过Binlog恢复删除的表
  9. MySQL - “Timeout error occurred trying to start MySQL Daemon”解决方法
  10. 洛谷 P1066 2^k进制数
  11. Android实现 再按一次退出 的三种方法 durationTime、timerTask 和Handler
  12. Vue.js 学习笔记 第4章 v-bind 及 class与style绑定
  13. Vue全家桶(Vue-cli、Vue-route、vuex)
  14. JAVA递归生成树形菜单
  15. [Nmap] Regular script
  16. Linux磁盘故障案例
  17. js 小说格式整理
  18. 关于thinkphp5被入侵后的一些思考
  19. 转:在ASP.NET MVC中通过URL路由实现对多语言的支持
  20. 关于UITableView的黑线条

热门文章

  1. Windows编译ejabberd
  2. Android倒计时器——CountDownTimer
  3. Android Stutio中使用java8的Lambda表达式
  4. T-SQL注意事项(1)——SET NOCOUNT ON的去与留
  5. 剑指Offer——回溯算法
  6. iOS中 为 iOS 建立 Travis CI 韩俊强的博客
  7. UNIX网络编程——名字与地址转换(gethostbyname,gethostbyaddr,getservbyname,getservbyport,getaddrinfo,getnameinfo函数)
  8. sql中奇怪的sum(1),sum(2),count(1),count(6),count(*):统计总数
  9. Java-IO之PrintWriter(字符打印输出流)
  10. 深入浅出Java Dom4j读取XML