【问题标题】:Is there a way to nest a loop in JavaScript until a condition is met? Like a while loop but nested?有没有办法在 JavaScript 中嵌套循环,直到满足条件?像while循环但嵌套?
【发布时间】:2021-08-10 08:01:48
【问题描述】:

我正在尝试编写一个算法来测试是否有可能在给定随机洗牌的牌组的情况下赢得比赛。我想出了一个超级简化的单人纸牌游戏,大约有 15 张牌,因为我只是在胡闹,我不想尝试一个有太多选择的游戏,直到我想出办法。我的目标是测试每一种可能的移动组合,所以我编写了一个函数,当给定棋盘状态时,它会返回一组可能的移动。我需要帮助的是每次更换电路板时调用该函数。现在我调用该函数的代码如下所示:

let moves = possibleMoves(piles);
if (moves.length >= 1){
  for (let move of moves) {
    let nB = piles.slice(0);
    nB[move.from].pop();
    nB[move.to].push({card: move.card, x: move.to, y: nB[move.to].length});
    let m0s = possibleMoves(nB);
    if (m0s.length >= 1) {
      for (let m0 of m0s){
        let nB0 = nB.slice(0);
        nB0[m0.from].pop();
        nB0[m0.to].push({card: m0.card, x: m0.to, y: nB0[m0.to].length})
      }
    }
  }
}

但显然我不能无限地嵌套该循环,直到没有可能的移动(请注意,我还没有编写代码来说明没有可能移动的情况,但我会讲到它)。我不能只做一个while循环的原因是因为我想在每一个可能的移动之后检查每一个可能的移动,而不是实际改变棋盘。有没有更好的方法来做到这一点?

【问题讨论】:

  • 可能是递归函数?

标签: javascript for-loop while-loop


【解决方案1】:

递归函数可能是你要找的

function recursive(piles){
let moves = possibleMoves(piles);
if (moves.length >= 1){
  for (let move of moves) {
    let nB = piles.slice(0);
    nB[move.from].pop();
    nB[move.to].push({card: move.card, x: move.to, y: nB[move.to].length});
    recursive(nB)
  }
}else{
return;
}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2016-06-06
    • 1970-01-01
    相关资源
    最近更新 更多