1.计算下列级数的和
直到。
这道题是老生长谈了,首先我的第一反应就是找规律,找分子分母的跟据该项的顺序变化规律,然后算法就是在迭代的过程中分别变化分子分母然后相除,把分子分母的计算给分开了。
#include<stdio.h>
double S(int x)
{
int n = 1;
double s = 1; //结果
double a = x; //每一项的分子
double b = 1; //每一项的分母
for (int i = 1; i <= n; i++)
{
double k = a / b; //每一项
s += k;
if (k - 1e-6 < 0)
break;
a *= x;
b *= i;
n++;
}
return s;
}
其实这个可以找到其中的数学关系,根据递归调用,可以很明了地解决问题。
设级数第n项为 ,则第n+1项为
,得到递推式为
,
。
#include<stdio.h>
double S(int x)
{
double s = 1.0; //结果
double t = 1.0; //每一项
int n = 1; //从0开始该项的项数
do {
t = t * x / n;
s += t;
n++;
} while (t > 1e-6);
return s;
}
此法相当于将每一项作为一个整体而不去关注每一项内部的关系,而关注的是前后两项的规律,哪一个更好,一目了然。
反省了一下,归根结底就是对递归算法的不敏感,当然这来源于数学嗅觉差,数学不好(一想到这就伤心)。