c语言用递归法求Y=x+x²/2!+x³/3!+……到第n项,n和x的值由键盘输入

如题所述

这是一个动态规划的题,首先,f(n)代表求1到第n项的和,那么递推公式为:
f(n) = f(n-1) + x的n次方/n的阶乘
简化 = f(n-1) + (f(n-1) - f(n-2))*x/n;

故有以下代码(动态规划的递归解法):
//由于这中间涉及除法,我选用了double,楼主视情况修改吧

double f[SIZE] = {0};
double getY(double x, double n)
{
if(n == 1)return x;
if(n == 2)return x*x/2 + x;
if(f[n] != -1)return f[n];

f[n] = (1+x/n)*getY(x, n-1) - (x/n)*getY(x, n-2);
return f[n];
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-05
#include "stdafx.h"

int n=0;
long x=0;
double sum=0;
double result=0;
double i=0;

double process(int nnn,long xxx)
{
double k=1;
double multi_sum=xxx;
if(nnn>0)
{
for(i=1;i<=nnn;i++)
{
k=k*i;
}
if(nnn==1)
{
multi_sum=xxx;
}
else
{
for(i=2;i<=nnn;i++)
{
multi_sum=multi_sum*xxx;
}
}
sum=sum+(multi_sum)/k;
process(nnn-1,xxx);
}
else
{
return sum;
}

}

int main(int argc, char* argv[])
{
printf("请输入X的值:\n");
scanf("%d",&x);
printf("请输入n的值:\n");
scanf("%ld",&n);
process(n,x);//result=process(n,x);会显示乱码,我也不知道为什么所以直接用SUM做全局变量,然后赋值
result=sum;
printf("结果:%lf\n",result);
return 0;
}
第2个回答  2014-11-05
下面是公式,如果这样还不会写,说明笨到家了,呵呵。

f(n) = f(n-1) * n n>0; n==0 f(0)=1
g(n) = g(n-1) + x^n/f(n)
相似回答