没有什么思路,不知道该怎么运用他给的条件,希望大家能给一下完整的过程讲解😂😂,谢谢😍
一般这种精确到小数点后几位,就是说最后一项x^n/n!满足小于该小数时就可以结束递归了,即满足x^n/n!<0.000001结束递归
思路:
观察每一项特征
x0=1=x^0/0!
x1=x=x^1/1!=x0*x/1
x2=x^2/2!=x1*x/2;
...
xn=x^n/n!=(xn-1)*x/n
也就是后一项=前一项乘以x再除以当前的n
所以,设当前项为xk=x^k/k!
则函数可定义为
double exn(double x, int n, double xk) {
double xkk=xk*x/n; //算出后一项
if(xkk<0.000001)
return xk; //如果后一项小于精度则舍去,返回当前项
return xk + exn(x, n+1, xkk); //否则返回当前项+递归后一项以后的总和
}
//测试
int main(){
double x=0.5;
double s = exn(x, 1, 1);//第三个参数1就是当前项第一项
printf("%.6f\n", s); //打印结果
printf("%.6f\n", exp(x)); //和系统函数对比
return 0;
}
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
int main()
{
double pow(double(x), int(n));
double x,e(x),sum=1,n;
cout << "enter e(x)=";
cin >> n;
sum = sum + fac(n);
e(x) = sum;
cout << "e(x)" << e(x) << endl;
return 0;
}
int fac(int n)
{
double sum, x, e(x);
sum = x*n*n / fac(n);
if (x*n*n / fac(n) < 0.000001)
{
int f = 1;
for (int n = 1; n++;)
f = n*(n - 1);
e(x) = sum + fac(n);
}
else
return e(x);
}
我写出来的程序是这样,请问能不能帮我改一下错误,我改不好😂,有些用法确实不太会用,谢谢!