在這里,我在 javascript 中有一個異步函式,用于用數字填充數獨板(基本上是它的解決方案)。我在每個數字插入之間使用了一個 sleeper 函式,以便用戶可以更好地了解遞回和回溯演算法,但是在插入第十五個數字后,該函式會自行停止......這里到底發生了什么?
var finalInd;
function sleep() {
console.log("happy")
return new Promise(resolve => setTimeout(resolve, 100));
}
async function solve () {
allowed = false;
var empty = findEmptySpace();
if(!empty) {
return true;
}
for(let i=1; i<10; i ) {
if(checkDuplicates(board, i, empty)) {
board[empty[0]][empty[1]] = i;
finalInd = (empty[0]*9) empty[1];
await sleep()
funcId("board").children[finalInd].innerHTML = i;
if(solve(board)) {
return true;
}
board[empty[0]][empty[1]] = 0;
funcId("board").children[finalInd].innerHTML = 0;
}
}
funcId("board").children[0].innerHTML = board[0][0];
return false;
}
function checkDuplicates (board, num, empty) {
for(let i=0; i<9; i ) {
if(board[empty[0]][i] == num && empty[1] != i) {
return false;
}
}
for(let i=0; i<9; i ) {
if(board[i][empty[1]] == num && empty[0] != i) {
return false;
}
}
var x = Math.floor(empty[1]/3);
var y = Math.floor(empty[0]/3);
for(let i=(y*3); i<(y*3) 3; i ) {
for(let j=(x*3); j<(x*3) 3; j ) {
if(board[i][j] == num && i != empty[0] && j != empty[1]) {
return false;
}
}
}
return true;
}
function findEmptySpace () {
for(let i=0; i<9; i ) {
for(let j=0; j<9; j ) {
if(board[i][j] == 0) {
return [i, j];
}
}
}
}

uj5u.com熱心網友回復:
我認為您忘記了對await的遞回呼叫solve,因此它將始終回傳一個承諾,這是真實的,并且您的函式將終止。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/517876.html
