这是在与朋友交谈时出现的,我想在这里问一下,因为这是一个有趣的问题,希望看到其他人的解决方案。
任务是编写一个函数Brackets(int n),该函数打印从1 … n开始的所有 格式正确的 括号组合。对于Brackets(3),输出为
() (()) ()() ((())) (()()) (())() ()(()) ()()()
对此产生了裂缝。.C#也。
public void Brackets(int n) { for (int i = 1; i <= n; i++) { Brackets("", 0, 0, i); } } private void Brackets(string output, int open, int close, int pairs) { if((open==pairs)&&(close==pairs)) { Console.WriteLine(output); } else { if(open<pairs) Brackets(output + "(", open+1, close, pairs); if(close<open) Brackets(output + ")", open, close+1, pairs); } }
递归利用了这样一个事实:您不能添加超过所需对数的开括号,并且您也不能添加超过括号的结束括号。