布尔随机性 - 递归......或不?

时间:2014-01-06 22:17:48

标签: javascript jquery recursion

尝试创建随机(0/1)boolean操作。我有一个多维数组设置。到目前为止,一切正常。我在正确的道路上吗?我目前使用递归;有没有更有效的方法来做到这一点?

function randomMove(){
    var cs=b.length,
    cr=Math.floor((Math.random()*cs)+1)-1,
    cc=Math.floor((Math.random()*cs)+1)-1;
    if(b[cr][cc]===""){ // THIS IS DEPENDENT ON EXISTING CODE. VIEW FIDDLE. //
        // DO STUFF //
    } else { randomMove(); }
}

这被认为是为2名球员创造随机动作的好方法吗?或者递归是错误的过程吗?

Fiddle

1 个答案:

答案 0 :(得分:3)

选择可能被选中的单元格,然后按索引选择一个随机单元格。

http://jsfiddle.net/Ehqka/1/

$.fn.random = function(){
    return this.eq(Math.floor(Math.random()*this.length));
};
function randomMove(){
    $("#board td").not(".o,.comp").random().addClass('comp');
    testWin();
}

它选择电路板中的所有单元,从选择中删除具有ocomp类的单元,生成0和剩余单元数之间的随机数,然后选择在该索引处添加一个类的单元格。

但是,请注意,由于在第一步中每次移动都是有效的,因此在第一次移动时,您的方法将比上述方法“更快”,因此它将永远不会超过第一次。通过删除.not(),我可以稍微优化一下以提高效率,但是你的仍然应该“更快”,因为它不必转到DOM。

“更快”是相对的,我的方法将随着表的增长而变得不那么有效,而不是你的第一步。随着越来越多的移动发生,您的方法将变得越来越低效,因为越来越多的可能移动无效。