问题描述
如果我输入零或负值,以下代码将正确返回。但是,如果我输入任何正值,它将无济于事。
有人可以解释为什么吗?我的期望是,它应该返回正数的阶乘。
#include<stdio.h>
int functionfact(int);
void main()
{
int x,fact;
printf("Input an integer value:\n");
scanf("%d",&x);
if (x<0)
printf("Please enter positive value!!");
else if (x==0)
printf ("The factorial of 0 is 1");
else
{
fact=functionfact(x);
printf("The factorial of %d is %d",x,fact);
}
}
int functionfact(int n)
{
return(n*functionfact(n-1));
}
解决方法
如Eric所指出的那样,该函数现在无法停止。
只需将功能更改为
int functionfact(int n)
{
return n > 0 ? (n*functionfact(n-1)) : 1;
}
,
我赞成卡尔比的建议,但我将其写为:
int functionfact(int n)
{
if (n > 0) {
return n * functionfact(n-1);
} else {
return 1;
}
}
面对现实:这个问题是由一个正在学习递归基础的初学者提出的。最好的办法是首先全面了解如何处理此类编程(因为我们以前都在为此苦苦挣扎,递归并不容易),只有在此之后,让我们制作一些典型的C oneliners。
,你好亲爱的!
函数functionfact没有任何终止条件。你可以试试这个...
int functionfact(int n)
{
if(n>1)
return(n*functionfact(n-1));
}
希望您能得到答案。