You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript实现数独网格预填充的递归逻辑问题求助

使用JavaScript实现数独网格预填充的递归逻辑问题求助

大家好,我正在用纯JavaScript写一个小型数独游戏,现在卡在代码逻辑上了。我看了一些实现例子,但没办法把它们的思路适配到自己的代码里,甚至怀疑是不是自己的核心思路本身就错了。

我的核心问题出在fillGrid函数的递归调用上——我搞不清楚什么时候该再次调用递归,以及什么时候该返回布尔值。试了好几种不同的写法,要么陷入死循环,要么最后得到的是一个只填充了一部分的网格。

先贴一下我目前的代码:

function fillGrid(grid) {
  // Run through grid to get next 0 to fill
  let filled = grid.every((row, rowIndex) => {
    // Row contains 0?
    let colIndex = row.indexOf(0);
    if (colIndex !== -1) {
      let randNumb = randomNumberBetween(1, 9);
      // Set random number where first 0 is found
      grid[rowIndex][colIndex] = randNumb;
      // Check validity
      let gridValid = gridIsValid(grid);
      // When valid continue with the new set number
      if (gridValid) {
        return fillGrid(grid);
      } else {
        // When not valid, reset number and have another try
        grid[rowIndex][colIndex] = 0;
        return fillGrid(grid);
      }
    }
  });
  return filled;
}

这个函数的预期功能是:接收一个所有位置都是0的预填充网格,最终把整个网格填满符合数独规则的数字。

我看到的其他实现例子,大多是遍历1到9的数字,并且在每次递归调用时追踪当前的行和列位置。但我更倾向于直接随机生成数字来填充,再继续处理下一个空格的思路,不知道这种思路能不能行得通?

备注:内容来源于stack exchange,提问作者elCinturon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:43:15