各位大侠 这是我编的 不过不行 结果老是1.000000 请各位大侠指教问题在哪 我新手 见笑了
#include<stdio.h>
int add (int x,int n)
{int N=1,p=-1,q=1,i,j,k;
double m=1.0;
for(k=1;k<=(2*n-1);k++)
N=N*k;
for(i=1;i<=(2*n-1);i++)
p=p*(-1);
for(j=1;j<=(2*n-1);j++)
q=q*x;
if(n>1)
m=(double)(p*q)/(double)(N)+add(x,n-1);
else
return m;}
main()
{int t,r;
double y;
scanf("%d%d",&t,&r);
y=add (t,r);
printf("%lf\n",y);}
小弟在此谢过
c语言 用递归调用求函数
答案:3 悬赏:30
解决时间 2021-03-02 20:59
- 提问者网友:陪我到最后
- 2021-03-02 12:05
最佳答案
- 二级知识专家网友:情战凌云蔡小葵
- 2021-03-02 12:56
#include<stdio.h>
double add (double x,double n)//int 改为double
{int N=1,p=-1,q=1,i,j,k;
double m=1.0;
for(k=1;k<=(2*n-1);k++)
N=N*k;
for(i=1;i<(2*n-1);i++) //好像多算了一次,我减了一次
p=p*(-1);
for(j=1;j<=(2*n-1);j++)
q=q*x;
if(n>1)
return m=(double)(p*q)/(double)(N)+add(x,n-1);加了个return
else
return m;}
main()
{
int t,r;
double y;
scanf("%d%d",&t,&r);
y=add (t,r);
printf("%lf\n",y);
system("pause");
}
double add (double x,double n)//int 改为double
{int N=1,p=-1,q=1,i,j,k;
double m=1.0;
for(k=1;k<=(2*n-1);k++)
N=N*k;
for(i=1;i<(2*n-1);i++) //好像多算了一次,我减了一次
p=p*(-1);
for(j=1;j<=(2*n-1);j++)
q=q*x;
if(n>1)
return m=(double)(p*q)/(double)(N)+add(x,n-1);加了个return
else
return m;}
main()
{
int t,r;
double y;
scanf("%d%d",&t,&r);
y=add (t,r);
printf("%lf\n",y);
system("pause");
}
全部回答
- 1楼网友:萝莉姐姐鹿小北
- 2021-03-02 14:31
我不知道你给的题目中的L是什么。不过你可以看一下:
#include<stdio.h>
double add (int x,int n)
{int N=1,p=-1,q=1,i,j,k;
for(k=1;k<=(2*n-1);k++)
N=N*k;
if(n%2!=0)
p=1;
for(j=1;j<=(2*n-1);j++)
q=q*x;
if(n>1)
return ((double)(p*q)/(double)(N)+add(x,n-1));
else
return (double)x;}
主函数不需要改。
- 2楼网友:何以畏孤独
- 2021-03-02 14:05
递归调用,即:自己调自己。
递归调用,系统将自动把函数中当前的变量和形参暂时保留起来,在新一轮的调用过程中,系统为新调用的函数所用到的变量和形参开辟另外的存储单元(内存空间)。每次调用函数所使用的变量在不同的内存空间。
例:使用递归的方法求n!
当n>1时,求n!的问题可以转化为n*(n-1)!的新问题。
比如n=5:
第一部分:5*4*3*2*1 n*(n-1)!
第二部分:4*3*2*1 (n-1)*(n-2)!
第三部分:3*2*1 (n-2)(n-3)!
第四部分:2*1 (n-3)(n-4)!
第五部分:1 (n-5)! 5-5=0,得到值1,结束递归。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯