【发布时间】:2021-04-28 17:35:45
【问题描述】:
所以我写了一些递归代码,用于在输入括号对(noOfPairs)的数量时打印平衡括号。但是我的答案是错误的。
例如:输入 n = 2 时,两种类型的括号将是 (()) 或 ()() 但我的程序输出的是 (()) 和 (()( 这是错误的。请帮助!
// Generate Brackets Strings Problem
// Using Recursion
// Given a number N, generate BALANCED BRACKETS using n pairs of Round Brackets
#include<iostream>
#include<cstring>
using namespace std;
// recursive function
void generateBrackets(string output, int noOfPairs, int open, int close) { // open = open brac ; close = close brac
// base case
if (output.length() == 2 * noOfPairs) {
cout << output << endl;
return;
}
// adding brackets (recursive)
// 2 ways in the middle of the string
if (open < noOfPairs) {
output.push_back('(');
generateBrackets(output, noOfPairs, open + 1, close);
}
if (close < open) {
output.push_back(')');
generateBrackets(output, noOfPairs, open, close + 1);
}
return;
}
int main() {
// input
int n;
cout << "Enter the number of pairs of round brackets" << endl;
cin >> n;
// make an output string
string output;
generateBrackets(output, n, 0, 0);
return 0;
}
【问题讨论】:
-
这真的是出生发送到debugger进行单步执行,特别是因为您有一个可重复的简单案例。
-
我这样做了,问题在于返回语句的工作次数!在打印了 -- (()) 之后,return 语句应该执行 3 次以删除最后 3 个括号,从而将输出字符串保留为 -- ( 但 return 语句仅执行 2 次。
-
@DivijJain "return 语句应该执行 3 次以删除最后 3 个括号" --
return语句不会删除任何内容。尝试单步执行您的代码,而不是只计算return语句。注意在返回后立即发生的事情。 -
你需要弹出你推的支架。
标签: c++ string algorithm recursion backtracking