谁帮我看看这个C语言程序哪里有错误?题目:用递归调用编写计算阶乘n!的函数fact()。 求n!

#include<stdio.h>voidmain(){intm;printf(“Enteranumber:”);scanf(“%d”,&m);printf(“%d!=%... #include <stdio.h>
void main()
{ int m;
printf(“Enter a number: ” );
scanf(“%d”, &m);
printf(“%d! = %d\n”, m, fact(m));
}
fact(int n)
{
int result;
if(n==1) return (1);
else result = fact(n-1)*n; /* 递归调用 */
return (1);
}
谢谢~
展开
 我来答
生存之上的苹果
2011-03-22
知道答主
回答量:23
采纳率:0%
帮助的人:25.9万
展开全部
return是函数返回值语句,作用是返回调用该函数地方。在函数体内应该只有一个return对应函数调用的位置,而且reutrn语句后面那()里应该是要返回的表达式而不是常量,你这有两个return都是返回数值常量1从而导致错误
#include <stdio.h>
void main()
{ int m;
printf(“Enter a number: ” );
scanf(“%d”, &m);
printf(“%d! = %d\n”, m, fact(m));
}
fact(int n)
{
int result; /*定义result*/
if(n==1||n==0) result=1;
else result = fact(n-1)*n; /* 递归调用 */
return (result); /*返回值为result*/
}
boboaaa12345
2011-03-22 · 超过25用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:64.4万
展开全部
函数该改成下面的形式
fact(int n)
{
if(n==1||n==0) return (1);
else return fact(n-1)*n; /* 递归调用 */
}
追问
还是不对……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-22
展开全部
fact(int n)
{
if(n==1) return (1);
else return fact(n-1)*n; //计算n-1的阶乘,得到n的阶乘,还要返回给上一级计算n+1的阶乘
}
追问
原理一样的啊~,用不用else没关系的吧
追答
return (1); 你的这里写的是返回1了,没有返回正确的值
另外,if(n==1)改成if(n==0),0的阶乘也是1。

再补充:m不能太大,16位的int的话,m超过过7就错了。
32位的int的话,可能还能算到12
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式