C 中阶乘计算的不同结果,Python 和 JavaScript

Different results for factorial calculation in C, Python and JavaScript

我在Python、JavaScript和C中写了一些简单的代码,我发现Python和JavaScript结果是一样的,但是C给了我另一个-错误-结果,我不明白错误是什么。

C代码:

int fact(int n){
    if(n==1){
        return 1;
    }else{
        return (n*fact(n-1));
    }
}

int main(void){
    printf("%i \n",fact(13));
}

JS代码:

function fact(n){
    if (n==1){
        return (1);
    }else{
        return (n*fact(n-1));
    }
}

console.log(fact(13));

Python代码:

def fact(n):
    if(n == 0):
        return 1
    else:
        return n * fact(n - 1)

print(fact(13))

你能解释一下吗?

作为解释型语言,它们(可能)会根据数据的大小自动选择变量的数据类型。

但是,在 C 中,您指定必须使用 "int" - 它太小了,装不下 13!

如果您将 "int" 切换为 "unsigned long long int"(是的,使用 "long" 两次),那么您的程序将 return 正确的结果持续更长的时间,直到失败再次 - 超过 64 位的大小。