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

#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);
}
谢谢~

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*/
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-22
函数该改成下面的形式
fact(int n)
{
if(n==1||n==0) return (1);
else return fact(n-1)*n; /* 递归调用 */
}追问

还是不对……

第2个回答  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

c语言怎么用递归调用函数的方法求n的阶乘?
1、打开VC6.0软件,新建一个C语言的项目:2、接下来编写主程序,首先定义用来求阶乘的递归函数以及主函数。在main函数里定义变量sum求和,调用递归函数fact(),并将返回值赋予sum,最后使用printf打印sum的结果,主程序就编写完了:3、最后运行程序,观察输出的结果。以上就是C语言使用递归求阶乘的写法...

c语言这段函数在不知道怎么循环的,书上的说法没看懂,求大神帮我看一下...
递归函数,需要一个递归的出口 ,这个出口就是当n为0或者1时,当n>1的时候,程序会重复调用递归函数,知道n的值发生改变,即n为1或者0时,这样就可以从已知推倒出未知的结果

c语言函数递归求阶乘的问题 求助大佬们
a)递归没有结束条件,要判断 num==0情况直接返回1,否则就是死循环 b) 返回类型是long int但是中间类型都是int,这是非常大的错误。int类型只能保存大概12!这样的数,此时返回long int毫无意义。所有的类型都应该换为long,否则能算的阶乘太小了 ...

c语言递归求阶乘
} int fac(int n){ int f;if(n<0)printf("n<0,data error!");else if(n==0||n==1)f=1;else f=fac(n-1)*n;return(f);}

求n的阶乘c语言编程递归
include <stdio.h> unsigned long fact(int n){ if(n<2)return 1UL;return n*fact(n-1);} int main(){ int n;scanf("%d",&n);printf("%lu\\n",fact(n));return 0;}

编写用C语言实现的求n阶阶乘问题的递归算法
代码如下:long int fact(int n){ int x;long int y;if(n<0){ printf(“error!”);} if(n==0)return 1;x=n-1;y=fact(x);return (n*y);} 拓展阅读:特点 递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它...

请帮忙看看这个程序哪儿错了? 题目是:用javascript递归方法实现n的阶 ...
var n=document.getElementById("n").value;var t=parseInt("n",10);仔细点看 n你加了双引号 也就是你把字符串n去做转换了 而不是你上面取得的变量 var t=parseInt("n",10);能转出了数字来 ?

C语言怎么用递归法求阶乘
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)。代码如下:...

c语言递归求阶乘的问题,我不知道哪里错了,求大神解答
printf("阶乘的最后值为:%ld",c);} int re(int n){ long r;if(n < 0){ printf("n<0,error");} else if(n == 0|| n == 1){ r = 1;} else { r = re(n-1)*n;} return r;} 程序大的错误没有,就是你的scanf用错了,详情看看我改后的程序!在scanf只能跟输入格式符...

c语言求1到n阶乘的和用递归
这里就是不断和fact函数相乘,之后编写主函数的内容:2、在main函数定义int类型变量sum,然后调用fact()将返回值赋予sum,最后使用printf打印sum的值:3、最后编写程序好后,来运行程序观察结果,这里可以看到打印出了6的阶乘。以上就是C语言用递归的方式求阶乘的过程:...

相似回答
大家正在搜