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

#include<stdio.h>#include<stdlib.h>doublef(doublen){if(n==0||n==1)return1;elsereturnn... #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)) ===|
展开
 我来答
宝淑兰竭碧
2019-03-23 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:28%
帮助的人:1019万
展开全部
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));
}
E30814075
2014-12-08 · 超过72用户采纳过TA的回答
知道小有建树答主
回答量:153
采纳率:66%
帮助的人:79.3万
展开全部
double f(double n)
{
if(n==0||n==1) return 1;
else return n*f(n-1);
}
double类型的函数,return 1,;返回值是整型,不太合适吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友72165e1
2014-12-08 · TA获得超过2170个赞
知道大有可为答主
回答量:1369
采纳率:100%
帮助的人:413万
展开全部
不明白为什么输出用运算符%干什么,%是针对两个整数而言的,所以可以将第15行改为
printf("%.0lf",f(n));
即可。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
潮范君
2014-12-08 · 知道合伙人软件行家
潮范君
知道合伙人软件行家
采纳数:1440 获赞数:2874
从事软件开发工作一年有余,主要C++方向。

向TA提问 私信TA
展开全部
 printf("%.0lf",(int)(f(n)%(n+1.0)));

加上强制类型转换.

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式