谁帮我看看这个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);
}
谢谢~ 展开
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);
}
谢谢~ 展开
展开全部
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*/
}
#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*/
}
展开全部
函数该改成下面的形式
fact(int n)
{
if(n==1||n==0) return (1);
else return fact(n-1)*n; /* 递归调用 */
}
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的阶乘
}
{
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询