锦标赛括号的递归算法

时间:2011-05-26 23:16:41

标签: php recursion

我正在创建一个锦标赛支架创建脚本,我正在参加锦标赛非玩家2的锦标赛。例如,它目前适用于2,4,8,16,32。 ..等等,但对于3,5,6,7 ......我很难过!

以下是我目前的情况:

$numrows = 8; // Currently for Testing.
draw_bracket($numrows);

function draw_bracket($numplayers)
{
    draw_series_container();
    draw_bracket_layer($numplayers, 0);
    draw_series_container_end();
}

/* RECURSION, YO! */
function draw_bracket_layer($numplayers, $layer)
{
    $levels = floor(log($numplayers, 2));
    if ($layer == $levels - 1)
    {
        draw_player_box();
        draw_player_box();
    }
    else
    {
        draw_series_container();
            draw_bracket_layer($numplayers, $layer + 1);
        draw_series_container_end();

        draw_series_container();
            draw_bracket_layer($numplayers, $layer + 1);
        draw_series_container_end();
    }
}

我假设我们需要更多'基础案例'。或者更多,如果这些关闭案件的陈述。

函数draw_series_container()和draw_player_box只是填充了HTML代码。如果需要,我可以展示它们。

有人可以用5或6人的支架开始我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

正确的等级公式为
    $levels = intval(log($numplayers, 2))+1;