c语言 求 阶乘 n!/m!(n-m)! 用递归函数求,帮我看看哪错了?

#include<stdio.h>
void main()
{
float fac1(int n);
float fac2(int m);
float fac3(int n,int m);
int n;
int m;
float y,x,z;
printf("输入两个整数");
scanf("%d",&n,&m);
y=fac1(n);
x=fac2(m)*fac3(n,m);
z=y/x;
printf("%10.0f\n",z);
}
float fac1(int n)
{
float f;
if(n<0)
{
printf("error");
}
else
if(n==0||n==1)
f=1;
else
f=fac1(n-1)*n;
return(f);
}
float fac2(int m)
{
float f;
if(m<0)
{
printf("error");
}
else
if(m==0||m==1)
f=1;
else
f=fac2(m-1)*m;
return(f);
}
float fac3(int n,int m)
{
float f;
if((n-m)<0)
{
printf("error");
}
else
if((n-m)==0||(n-m)==1)
f=1;
else
f=fac3((n-m)-1)*(n-m);
return(f);
}

scanf少个%d吧
不需要这么多函数。。。直接一个求阶乘的就行。
#include <stdio.h>
int fun(int a)
{
int f;
if (a==1||a==0)
f=1;
else
f=a*fun(a-1);
return f;
}
void main()
{
int n,m;
float x;
printf("输入2个数:\n");
scanf("%d%d",&n,%m);
x=fun(n)/fun(m)*fun(n-m);
printf("结果是:%f\n",x);

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-15
1. scanf("%d",&n,&m);改成scanf("%d%d",&n,&m); 如楼上所说,而且要限制先输入比较大的数字要不然n-m出现负数结果要错
2. fac3(n,m)有两个参数的
float fac3(int n,int m)
{
//...
f=fac3((n-m)-1)*(n-m); //这里就只传递了一个参数
//...要改成f=fac3((n-m),1) * (n-m);
}
第2个回答  2011-06-15
1, scanf("%d",&n,&m);改成scanf("%d%d",&n,&m);
2,我们只需要定义fac1。fac2,fac3没必要定义。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网