首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >递归javascript没有递归

递归javascript没有递归
EN

Stack Overflow用户
提问于 2014-02-03 18:08:31
回答 1查看 100关注 0票数 0

我正在制作一个解决3*3 sudoku的脚本。这将是一个可行的答案:

代码语言:javascript
运行
复制
123   312
231   123
312   231

作为输入,我会给出一个3*3 sudoku,其中零是空白点。这个可以工作: 023 230 310

作为输出,我将得到: 123 231 312

然而,我的脚本不起作用。我的输入名为sq,它有一个名为findZero的函数,用于搜索一个零,我有一个名为fill的函数,它删除了一个工作号码的零,我有一个名为checkRC (复选行列)的函数,用于扫描工作号码。

这将是一个递归脚本。

但是,通过这个脚本,我将得到给定的输入:

代码语言:javascript
运行
复制
[0, 2, 3],
[2, 3, 0],
[3, 1, 0]

这一产出:

代码语言:javascript
运行
复制
[1, 2, 3],
[2, 3, 0],
[3, 1, 0],

所以它只改变了一次,然后停止了,我想。我不知道怎么修理这个!

这是我的密码:

代码语言:javascript
运行
复制
var sq = [
    [0, 2, 3],
    [2, 3, 0],
    [3, 1, 0]
];
var x;
var y;

function findZero(square) {
    for (var i = 0; i < 3; i++) {
        for (var j = 0; j < 3; j++) {
            if (square[i][j] === 0) {
                x = i;
                y = j;
                return [x, y];
            }
        }
    }
    return [-1, -1];
}

function fill(square) {

    if (findZero(square)[0] == -1) {

        return square; }

      else {
        for (var w = 1; w < 4; w++) {
            if(checkRC(square,x,y,w) === true){
             square[x][y] = w;
                return square;


            }
        }
     }
}


var bool = true

 function checkRC(square, x, y, w) {

    for (var k = 0; k < 3&&bool; k++) {
        if (square[x][k] == w || square[k][y] == w) {
            bool = false;
            return bool;
          }
          else{
            bool = true;
            return bool;

        }
    }
}


console.log(fill(sq));

如果你发现一个小提琴链接更容易:

http://jsfiddle.net/akqn7/

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-03 18:34:32

因此,首先,您从未在递归中调用您的函数!

代码语言:javascript
运行
复制
function fill(square) {

    if (findZero(square) === null) {
        return square;
    } else {
        for (var w = 1; w < 4; w++) {
            if (checkRC(square, x, y, w) === true) {
                square[x][y] = w;
                return fill(square);
            }
        }
    }
}    

看看我是如何放置返回fill()的;这就是递归需要的地方

您的函数checkRC也错了,下面是修正后的版本:

代码语言:javascript
运行
复制
function checkRC(square, x, y, w) {

    var bool = true;

    for (var k = 0; k < 3 && bool; k++) {
        if (square[x][k] == w || square[k][y] == w) {
            bool = false;
            break;
        }
    }
    return bool;
}

我把bool放在函数中,不直接返回结果,因为如果第一个数字是假的,它就会停止。

参见此小提琴

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21534456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档