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)) ===| 展开
#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)) ===| 展开
4个回答
展开全部
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));
}
即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));
}
展开全部
double f(double n)
{
if(n==0||n==1) return 1;
else return n*f(n-1);
}
double类型的函数,return 1,;返回值是整型,不太合适吧
{
if(n==0||n==1) return 1;
else return n*f(n-1);
}
double类型的函数,return 1,;返回值是整型,不太合适吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不明白为什么输出用运算符%干什么,%是针对两个整数而言的,所以可以将第15行改为
printf("%.0lf",f(n));
即可。
printf("%.0lf",f(n));
即可。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf("%.0lf",(int)(f(n)%(n+1.0)));
加上强制类型转换.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询