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 位的大小。
我在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 位的大小。