c语言递归求阶乘程序出错

#include <stdio.h>
#include <stdlib.h>
double f(double n)
{
if(n==0||n==1) return 1;
else return n*f(n-1);
}
int main()
{
double n,t,i;
scanf("%lf",&t);
for(i=0;i<t;i++)
{
scanf("%lf",&n);
printf("%.0lf",(f(n)%(n+1.0))); //15行这一行报错
}
}

||=== 构建: Debug in 156 (compiler: GNU GCC Compiler) ===|
D:\156\main.c||In function 'main':|
D:\156\main.c|15|error: invalid operands to binary % (have 'double' and 'double')|
D:\156\main.c|17|warning: control reaches end of non-void function [-Wreturn-type]|
||=== Build 失败了: 1 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

n的阶乘,就是从1开始乘到n,即1*2*3*...*(n-1)*n。
即n!=1*2*3*...*(n-1)*n。
而(n-1)!=1*2*3*...*(n-1)。
所以可以得出,n!=(n-1)!
*
n。
由这个概念,可以得出递归求阶乘函数fact的算法:
1
如果传入参数为0或1,返回1;
2
对于任意的n,返回n*fact(n-1)。
代码如下:
int fact(int n)
{
if(n == 0 || n == 1) return 1;
return n*(fact(n-1));
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-08
double f(double n)
{
if(n==0||n==1) return 1;
else return n*f(n-1);
}
double类型的函数,return 1,;返回值是整型,不太合适吧
第2个回答  2014-12-08
不明白为什么输出用运算符%干什么,%是针对两个整数而言的,所以可以将第15行改为
printf("%.0lf",f(n));
即可。本回答被提问者和网友采纳
第3个回答  2014-12-08
 printf("%.0lf",(int)(f(n)%(n+1.0)));

加上强制类型转换.

相关了解……

你可能感兴趣的内容

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