【发布时间】:2016-02-25 19:09:37
【问题描述】:
我写了一个 C 程序,使用递归函数求一个数的阶乘,代码如下:
//program to find factorial of a number using a recursive function
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int factorial(int a);
int main()
{
int num, fact;
printf("Enter a number: ");
scanf("%d", &num);
if(num<=0)
{
printf("The number cannot be zero/negative.");
exit(1);
}
fact=factorial(num);
printf("The factorial of the entered number is: %d", fact);
getch();
return 0;
}
int factorial(int a)
{
while(a>1)
return a*factorial(--a);
}
在“while”循环中的上述代码中,如果输入“a”>1,那么它应该执行,但是当我编译程序(使用 Dev C++ v.5.4.2)并将输入作为 1 时,我得到阶乘为 1。该程序是所需问题的解决方案,但我需要知道后台实际发生的情况......
提前谢谢你
【问题讨论】:
-
当您调用
factorial(1);时,它不会返回任何内容,并且对fact的访问会导致未定义的行为。 -
你已经有了递归。
while是不必要的,如上所述,会导致问题。 -
@BlueMoon “未定义的行为”是什么意思?但是当我输入 1 时,我得到的阶乘为 1,这是正确的答案,为什么会这样......
-
太糟糕了...在
factorial()中,如果a>1使用递减是未定义的行为,如果a<=1是未定义的行为,因为不执行`return 语句...跨度> -
我的意思是this。看似获得预期结果也是其中的一部分。