为什么我计算阶乘的简单 C 代码不起作用
Why my simple C code to calculate factorial not working
如果我输入零或负值,则以下代码 returns 正确。但是,如果我输入任何正值,它什么都不做。
有人可以解释为什么吗?我的期望是,它应该 return 正数的阶乘。
#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;
}
我对 Kalbi 的提议投了赞成票,但我会把它写成:
int functionfact(int n)
{
if (n > 0) {
return n * functionfact(n-1);
} else {
return 1;
}
}
让我们面对现实:这个问题是由正在学习递归基础知识的初学者提出的。最好先完全了解如何处理此类编程(因为我们之前都在努力解决它,递归并不容易),然后再做一些典型的 C oneliner。
你好亲爱的!
函数functionfact没有任何终止条件。你可以试试这个...
int functionfact(int n)
{
if(n>1)
return(n*functionfact(n-1));
}
希望你能得到答案。
如果我输入零或负值,则以下代码 returns 正确。但是,如果我输入任何正值,它什么都不做。
有人可以解释为什么吗?我的期望是,它应该 return 正数的阶乘。
#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;
}
我对 Kalbi 的提议投了赞成票,但我会把它写成:
int functionfact(int n)
{
if (n > 0) {
return n * functionfact(n-1);
} else {
return 1;
}
}
让我们面对现实:这个问题是由正在学习递归基础知识的初学者提出的。最好先完全了解如何处理此类编程(因为我们之前都在努力解决它,递归并不容易),然后再做一些典型的 C oneliner。
你好亲爱的!
函数functionfact没有任何终止条件。你可以试试这个...
int functionfact(int n)
{
if(n>1)
return(n*functionfact(n-1));
}
希望你能得到答案。