递归印刷平衡的Parantheses

时间:2017-02-15 18:52:24

标签: javascript algorithm recursion printing output

我有一个递归函数,它打印所有平衡括号的有效组合,如下所示:

function addParen(upstock, downstock, sa)
{
    if (upstock == 0 && downstock == 0)
    {
        Print(sa);
    }

    if (upstock > 0)
    {
        addParen(upstock - 1, downstock + 1, sa + "(");
    }

    if (downstock > 0)
    {
        addParen(upstock, downstock - 1, sa + ")");
    }
} 

对于n = 3,它直接将结果打印为“((()))”或“()()()”之类的字符串(我们假设3对,对的数量并不重要)。但是,每当初始空字符串与“(”或“)”连接时,我希望我的递归函数逐个打印每个括号。例如,对于第一个组合,我希望它打印像“(”then“(”then“) (“然后”)“然后”)“然后”)“。然后它可以以相同的方式进行第二次组合。是否可以这样做?

2 个答案:

答案 0 :(得分:0)

希望这是你正在寻找的东西!

function addParen( upstock, downstock ) {

      if (upstock > 0 )
      {
          Print("(");
          addParen(upstock - 1, downstock+1);
      }

      if (downstock > 0 )
      {
          Print(")");
          addParen(upstock, downstock - 1);
      }

} 

答案 1 :(得分:0)

您的平衡括号不起作用,因为您需要进行另一次检查。贝娄我将结果与组合总数相对应。

function addParen(n, upstock, downstock, sa){
        var count = 0;

        if(sa.length == 2 * n  && upstock == downstock){
                console.log(sa);
                //number of valid combinations
                return 1;
            }

        if(upstock >= downstock && upstock <= n){
            count += addParen(n, upstock + 1, downstock, sa + "(");
        }

        if(downstock < upstock){
            count += addParen(n, upstock, downstock + 1, sa + ")");
        }

        return count;
    } 

function numberOfBalancedParenthesis(n){
    return addParen(n, 0, 0, "");
}

//try this on the console
numberOfBalancedParenthesis(2)