计算1!+2!+3!+...+n!的问题会有好几中算法,但不同的算法速度会有天壤之别,特别是在n越大的时候.心血来潮,用HTML和JavaScript做了个演示几种算法的网页.
在测试的时候,算法2明显比算法1和算法3慢得多,因此在计算的时候,不要把n的值设得太高,用算法2的时候设为100都很慢了.超过170时会因为结果过大而显示不了正确的值,但值并不影响算法的执行.
相对于算法3来说,速度非常的快,可以把n的值设到10000都只用了几秒钟而已.但对其它算法,不要玩火,一不小心会死机的!
--原创文章,可以随意复制发表,请注明出处和作者
BY YCOE
<script language = javascript>
//第一种算法
function jc(){
i = parseInt(document.j.c.value);
var date = new Date();
sum = 0;
test = "0!";
for(a=1;a<=i;++a){
result = 1;
for(n = 2;n<=a;++n){
result*=n;
}
sum +=result;
test = test +"+"+a+ "!";
}
var date1 = new Date();
alert(i==0?"1":sum + "\n用时:"+(date1-date));
}
//======================第二种算法
function jc1(){
i = parseInt(document.j.c.value);
var date22 = new Date();
test = "";
sum = 0;
for(n = 1; n<=i;++n){
sum+=c(n);
test +=n+"!="+c(n)+"\n";
}
var date2 = new Date();
alert(sum + "\n用时:"+(date2-date22));
}
function c(n){
return n==0?1:n*c(n-1);
}
//===========第三种算法
function jc2(){
i = parseInt(document.j.c.value);
var date33 = new Date();
pre = 1;
test = "";
count = "0!";
sum = 0;
for(n = 1; n<=i;++n){
sum += c2(n);
count +="+" +n+"!";
}
var date3 = new Date();
alert(i==0?"1":sum + "\n用时:"+(date3-date33));
}
function c2(n){
pre *= n;
test +=n+"!="+pre+"\n";
return pre;
}
</script>
<body>
算法:1! + 2! + + n!<br/>
<form name="j" id="j">
<input type="text" name = "c" value=10>
<input type = "button" value="算法1" onClick="jc()"/>
<input type = "button" value="算法2" onClick="jc1()"/>
<input type = "button" value="算法3" onClick="jc2()"/>
</form>
</body>
//第一种算法
function jc(){
i = parseInt(document.j.c.value);
var date = new Date();
sum = 0;
test = "0!";
for(a=1;a<=i;++a){
result = 1;
for(n = 2;n<=a;++n){
result*=n;
}
sum +=result;
test = test +"+"+a+ "!";
}
var date1 = new Date();
alert(i==0?"1":sum + "\n用时:"+(date1-date));
}
//======================第二种算法
function jc1(){
i = parseInt(document.j.c.value);
var date22 = new Date();
test = "";
sum = 0;
for(n = 1; n<=i;++n){
sum+=c(n);
test +=n+"!="+c(n)+"\n";
}
var date2 = new Date();
alert(sum + "\n用时:"+(date2-date22));
}
function c(n){
return n==0?1:n*c(n-1);
}
//===========第三种算法
function jc2(){
i = parseInt(document.j.c.value);
var date33 = new Date();
pre = 1;
test = "";
count = "0!";
sum = 0;
for(n = 1; n<=i;++n){
sum += c2(n);
count +="+" +n+"!";
}
var date3 = new Date();
alert(i==0?"1":sum + "\n用时:"+(date3-date33));
}
function c2(n){
pre *= n;
test +=n+"!="+pre+"\n";
return pre;
}
</script>
<body>
算法:1! + 2! + + n!<br/>
<form name="j" id="j">
<input type="text" name = "c" value=10>
<input type = "button" value="算法1" onClick="jc()"/>
<input type = "button" value="算法2" onClick="jc1()"/>
<input type = "button" value="算法3" onClick="jc2()"/>
</form>
</body>
在测试的时候,算法2明显比算法1和算法3慢得多,因此在计算的时候,不要把n的值设得太高,用算法2的时候设为100都很慢了.超过170时会因为结果过大而显示不了正确的值,但值并不影响算法的执行.
相对于算法3来说,速度非常的快,可以把n的值设到10000都只用了几秒钟而已.但对其它算法,不要玩火,一不小心会死机的!
--原创文章,可以随意复制发表,请注明出处和作者
BY YCOE