谁帮我看看这个C语言程序哪里有错误?题目:用递归调用编写计算阶乘n!的函数fact()。 求n!
发布网友
发布时间:2022-06-01 05:09
我来回答
共3个回答
热心网友
时间:2023-11-24 03:02
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*/
}
热心网友
时间:2023-11-24 03:02
函数该改成下面的形式
fact(int n)
{
if(n==1||n==0) return (1);
else return fact(n-1)*n; /* 递归调用 */
}追问还是不对……
热心网友
时间:2023-11-24 03:02
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