Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归打印论文_Javascript_Algorithm_Recursion_Printing_Output - Fatal编程技术网

Javascript 递归打印论文

Javascript 递归打印论文,javascript,algorithm,recursion,printing,output,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 + "("); }

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

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对,对的数量并不重要)。但是,我希望递归函数在初始空字符串与“(“or”)”串联时逐个打印每个括号。例如,对于第一个组合,我希望它打印为“(“then”(“then”)“then”)”和“;”。然后第二个组合也可以按同样的方式进行。有可能吗?

希望这就是您要找的

function addParen( upstock, downstock ) {

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

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

} 

您的不使用平衡括号,因为您需要进行另一次检查。下面我把结果和组合的总数放在一起

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)
函数addParen(n,上斯托克,下斯托克,sa){
var计数=0;
如果(sa.length==2*n&&upstock==downstock){
控制台日志(sa);
//有效组合数
返回1;
}

如果(upstock>=downstock&&upstock您想等待用户输入吗?这就是您要问的吗?函数是正确的,或者您想做的是“(”)”不,我想做的是,当递归进行时,字符串用左括号或右括号连接起来,我立即想把括号放在屏幕上。有了这个函数,我总是在上斯托克和下斯托克等于零时,把完成的字符串放在屏幕上。你希望它如何打印第二个stri使用给定前缀的ng?或者您正在寻找树样式的输出?当输入太大时我问这个问题的原因我希望在程序执行其余部分时在屏幕上看到结果组合。但是您的程序在找到每个字符串时打印出它;它不需要等待所有字符串都被计算出来。那么有什么问题呢你在观察吗?它仍然很混乱。只打印第一个有效的组合。我也这样做了,但没有成功。谢谢。它现在工作了。它一个一个地打印每个元素,对吗?不是作为一个完整的字符串。实际上是一个接一个,在找到正确的字符串后,但它适用于所有现有的组合,如果答案对你有效,请标记当solvedIt工作时,我将其标记为已解决。我为什么要问这个问题?因为当输入n太大时,我希望在屏幕上看到结果组合,而程序仍在执行其余组合。但是我无法做到。我认为您混淆了要解决的问题和浏览器行为。Y您希望在浏览器计算其余部分时看到这些组合,但这是另一个问题,在javascript上没有睡眠函数,最接近的是使用此函数设置超时setTimeout to wait。不幸的是,它不能正确显示所有结果。