如何在Javascript中使用递归来寻找最佳的德州Hold';他们的手?

如何在Javascript中使用递归来寻找最佳的德州Hold';他们的手?,javascript,recursion,Javascript,Recursion,我正试图想出一个快速的方法来评估一张扑克牌,这张牌通常由五张社区牌和两张每位玩家独有的牌组成,总共有七张牌 我读过一篇关于扑克评估算法的文章,该算法使用递归将牌数从七张减少到五张,然后计算结果 我曾在大学里使用过几次递归,但我看不出它如何适用于这种情况 据我所知,这家伙在说:我们计算每个七手组合的最佳五张牌结果,这意味着整个计算器逻辑将包含在这个递归循环中,但我看不到a)这个递归循环最终将如何到达它的基本情况,b)如何实现它 任何帮助都将不胜感激 源代码 var suits = ['Clubs'

我正试图想出一个快速的方法来评估一张扑克牌,这张牌通常由五张社区牌和两张每位玩家独有的牌组成,总共有七张牌

我读过一篇关于扑克评估算法的文章,该算法使用递归将牌数从七张减少到五张,然后计算结果

我曾在大学里使用过几次递归,但我看不出它如何适用于这种情况

据我所知,这家伙在说:我们计算每个七手组合的最佳五张牌结果,这意味着整个计算器逻辑将包含在这个递归循环中,但我看不到a)这个递归循环最终将如何到达它的基本情况,b)如何实现它

任何帮助都将不胜感激

源代码

var suits = ['Clubs', 'Spades', 'Hearts', 'Diamonds'];
var ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King', 'Ace'];
var combinations = ['Royal Flush', 'Straight Flush', 'Four of a Kind', 'Full House', 'Flush', 'Straight', 'Three of a Kind', 'Two Pair', 'One Pair'];
var deck = [];
var players = [new Player(), new Player()];
var table = [];

function Player()  {
    this.hand = [];
    this.result;
}

function Card(suit, rank)   {
    this.suit = suit;
    this.rank = rank;
    this.name = rank + ' of ' + suit;
}


function initDeck() {
    deck = [];

    for(var i = 0; i < 4; i++)   {
        for(var j = 0; j < 13; j++)   {
            deck.push(new Card(suits[i], ranks[j]));
        }
    }

}

function drawCard() {
    var randNumber = Math.floor(Math.random() * deck.length);
    var drawnCard = deck[randNumber];
    deck.splice(randNumber, 1);

    return drawnCard;
}


function dealCards()    {
    for(var i = 0; i < 2; i++)   {
        for(var j = 0; j < players.length; j++)   {
            var drawnCard = drawCard();
            players[j].hand.push(drawnCard);
        }
    }
}

function flop() {
    for(var i = 0; i < 3; i++)   {
        var drawnCard = drawCard();
        table.push(drawnCard);
    }
}

function turn()    {
    var drawnCard = drawCard();
    table.push(drawnCard);
}

function river()    {
    var drawnCard = drawCard();
    table.push(drawnCard);
}

function showDown() {
    for(var i = 0; i < players.length; i++)   {        

        evaluate(i);
        document.write("<br>");   

    }

}

function evaluate(player)  {
    var totalHand = players[player].hand.concat(table);


}


initDeck();
dealCards();
document.write("Player 1: " + players[0].hand[0].name + ' and ' + players[0].hand[1].name + '<br>');
document.write("Player 2: " + players[1].hand[0].name + ' and ' + players[1].hand[1].name + '<br><br>');
flop();
document.write("Flop: " + table[0].name + ', ' + table[1].name + ' and ' + table[2].name + '<br>');
turn();
document.write("Turn: " + table[0].name + ', ' + table[1].name + ', ' + table[2].name + ' and ' + table[3].name + '<br>');
river();
document.write("River: " + table[0].name + ', ' + table[1].name + ', ' + table[2].name + ', ' + table[3].name + ' and ' + table[4].name + '<br>');
showDown();
var suits=[“梅花”、“黑桃”、“红心”、“钻石”];
变量等级=['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace'];
var组合=['Royal Flush','Straight Flush','Four of a Kind','Full House','Flush','Straight','Three of a Kind','Two Pair','One Pair'];
var deck=[];
var players=[new Player(),new Player()];
var表=[];
函数播放器(){
this.hand=[];
这就是结果;
}
功能卡(套装、等级){
这套衣服;
这个.等级=等级;
this.name=军衔+官司;
}
函数initDeck(){
甲板=[];
对于(变量i=0;i<4;i++){
对于(var j=0;j<13;j++){
推牌(新牌(适合[i],等级[j]);
}
}
}
函数drawCard(){
var randNumber=Math.floor(Math.random()*deck.length);
var drawnCard=甲板[randNumber];
甲板拼接(编号1);
返回drawnCard;
}
函数dealCards(){
对于(变量i=0;i<2;i++){
对于(var j=0;j”);
}
}
功能评估(玩家){
var totalHand=players[player].hand.concat(表);
}
initDeck();
dealCards();
文档。写入(“玩家1:+玩家[0]。手牌[0]。姓名+”和“+玩家[0]。手牌[1]。姓名+”
); 文档。写入(“玩家2:+players[1]。手牌[0]。姓名+”和“+players[1]。手牌[1]。姓名+”

); flop(); document.write(“Flop:+表[0]。名称+”,“+表[1]。名称+”和“+表[2]。名称+”
”); 转动(); 文档。写入(“旋转:“+表[0]。名称+”,“+表[1]。名称+”,“+表[2]。名称+”和“+表[3]。名称+”
”); 河流(); 文档。写入(“河流:+表[0]。名称+”、“+表[1]。名称+”、“+表[2]。名称+”、“+表[3]。名称+”和“+表[4]。名称+”
); 摊牌();
我不知道递归,但您可以使用for循环强制执行它:

var suits=[“梅花”、“黑桃”、“红心”、“钻石”];
变量等级=['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace'];
var deck=[];
var-allset=[];
风险值组合=[{
名称:'直齐',
测试:功能(卡){
//所有人都必须穿同一套衣服
如果(卡片)。一些(功能(卡片){
返回卡片。套装!=卡片[0]。套装;
})) {
返回false;
}
//是连续的
var arr=卡
.地图(功能(卡片){
返回卡.rank;
})
.排序(功能(a、b){
返回a-b;
});
返回Math.abs(arr[0]-arr[arr.length-1])