我有这个锡兰代码:
Integer fact(Integer n)
{
return (n<=1)then 1 else n*fact(n-1);
}
Integer? factorial(Integer|String|Null n)
{
Integer? num;
if(is String n)
{
num=parseInteger(n);
}
else if(is Integer n)
{
num=n;
}
else
{
num=null;
}
if(exists num)
{
if(num<0)
{
return null;
}
if(num==0)
{
return 1;
}
return (2..num).fold(1)((x,y)=>x*y);//line 1
}
else
{
return null;
}
}
shared void main()
{
print("enter a number");
value input=process.readLine()?.trimmed;
value starttime=system.milliseconds;
value fact=factorial(input);
value elapsedtime=(system.milliseconds-starttime).float/1000;
if(exists fact)
{
print("(!n)=``fact``");
print(elapsedtime);
}
else
{
print("Error, either you gave a negative number or you didn't enter an integer(or did you left the input blank ?)");
}
}
在第 1 行,我使用 fold 来计算阶乘,得到的性能在 0.08 到 0.06 秒之间。
现在,如果我用这个替换第 1 行:
return fact(num);
我的性能介于 0.021 和 0.012 之间,这是为什么呢?
在这种情况下,我尝试的数字是 10。