我有下面的代码来生成给定数字的排列。问题是如果我尝试产生5位数以上的排列然后它永远运行。如何优化此程序以在浏览器中显示结果。在所有浏览器中永远运行的Javascript程序
<html>
<script>
function permute(level, permuted, used, original) {
var length = original.length;
if (level == length) {
//System.out.println(permuted);
document.getElementById("nmbrs").innerHTML = document.getElementById("nmbrs").innerHTML + "<br />" +permuted
} else {
for (var i = 0; i < length; i++) {
if (!used[i]) {
used[i] = true;
permute(level + 1, permuted + original[i],
used, original);
used[i] = false;
}
}
}
}
function executeP(){
var s = ['0','1','2','7'];
document.getElementById("nmbrs").innerHTML = "";
var length = eval(document.getElementById("num").value);
/*for(var i=length-1;i>=0;i--){
var used = [false, false, false, false];
permute(i, "", used, s);
}*/
var newArray = ['0','1','2','7'];
if(length > 4){
var newIte = length - 4;
do{
newArray.push(s[(newIte-1) % 4]);
newIte--;
}while(newIte>0);
}
var used = [false, false, false, false,false, false, false, false,false, false, false, false];
permute(newArray.length-length, "", used, newArray);
}
</script>
<body>
<input type="text" id="num" />
<input type="button" value="Generate Num" onclick="executeP()" />
<div id="nmbrs" ></div>
</body>
</html>
+1为您的解决方案。但为什么要8?我试图产生n位数字 – Soft 2011-04-29 01:13:28
那么,@ user393001提出的递归肯定没有帮助。而且,在这个长度上,这些数字开始变得巨大。有n!长度为n的排列,因此在8处有40320个8位数的数字,您正在生成并添加到页面中。在9,你有362880,等等...... – 2011-04-29 01:19:13