c语言用递归法求Y=x+x²/2!+x³/3!+……到第n项,n和x的值由键盘输入
答案:3 悬赏:70 手机版
解决时间 2021-04-07 13:40
- 提问者网友:龅牙恐龙妹
- 2021-04-07 00:15
c语言用递归法求Y=x+x²/2!+x³/3!+……到第n项,n和x的值由键盘输入
最佳答案
- 五星知识达人网友:酒醒三更
- 2021-04-07 01:10
这是一个动态规划的题,首先,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];
}
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楼网友:罪歌
- 2021-04-07 02:27
下面是公式,如果这样还不会写,说明笨到家了,呵呵。
f(n) = f(n-1) * n n>0; n==0 f(0)=1
g(n) = g(n-1) + x^n/f(n)
f(n) = f(n-1) * n n>0; n==0 f(0)=1
g(n) = g(n-1) + x^n/f(n)
- 2楼网友:孤独入客枕
- 2021-04-07 01:46
#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;
}
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;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯