在计算 c 中的阶乘时,为什么操作不继续进一步达到负值?

while calculating factorial in c why doesn't operation keep continuing further to negative values?

我正在编写一个用于查找阶乘的递归程序,一旦 x 达到零,为什么操作会在被调用函数中停止,而不是继续进一步处理负值,例如 -1、-2、-3 等等,如 int也采用负值并继续操作,因为它是我自己的用户定义函数。

  #include<stdio.h>
int factorial( int x);
int main() {
    int n;
    scanf("%d",&n);

    n=factorial(n);
    printf("%d",n);

    return 0;
}
int factorial(int x){
    int f;
    if(x==0||x==1){
        return 1;
    }
    else{
    f= x*factorial(x-1);
    return f;}
}

当使用参数值 2 调用 factorial 时,它会计算 if 语句中的 x==0||x==1。此条件为假,因此 if 中的“then”子句不执行,程序控制流向 else.

else执行f = x*factorial(x-1),其中x为2,factorial(x-1)factorial(1)

因此我们递归调用了参数值为 1 的 factorial。它在 if 语句中计算 x==0||x==1。此条件为真,则执行“then”子句。

then子句是return 1;,所以函数returns1,程序控制权returns交给调用者

在调用者中,我们还在求值x*factorial(x-1)factorial(x-1) 返回了 1,所以我们有 2*1。所以 f 设置为 2.

下一条语句是return f;。所以2返回给调用者,程序控制returns给调用者,也就是main。程序继续执行 main.

程序不会继续到负值,因为没有调用 factorial 具有负值。