【发布时间】:2017-03-28 19:57:23
【问题描述】:
我在 Java 中遇到了递归问题。问题是这样的:
给定 n 对括号,编写一个函数来生成格式正确的括号的所有组合。
例如,给定n = 3,一个解集是:
上述问题的代码是递归的,如下所述:
public List<String> generateParenthesis(int n) {
ArrayList<String> result = new ArrayList<String>();
dfs(result, "", n, n);
return result;
}
public void dfs(ArrayList<String> result, String s, int left, int right){
if(left > right)
return;
if(left==0&&right==0){
result.add(s);
return;
}
if(left>0){
dfs(result, s+"(", left-1, right);
}
if(right>0){
dfs(result, s+")", left, right-1);
}
}
我已经能够将程序跟踪到某个特定点,但我无法完全跟踪它。
如果 n=2
left=2;right=2;
result="(())",
__________
| s="" |
| l=2 |
| r=2 |
| |
| |
|________|
|
V
__________
| s=( |
| l 1 |
| r 2 |
| |
| |
|________|
|
V
__________
| s=(( |
| l 0 |
| r 2 |
| |
| |
|________|
|
V
__________
| s=(() |
| l 0 |
| r 1 |
| |
| |
|________|
|
V
__________
| s= (())|
| l=0 |
| r=0 |
| |
| |
|________|
在我上面提到的之后,该程序将如何工作?有人可以帮我追踪吗?谢谢。
【问题讨论】:
-
你有使用递归吗?
-
我不明白您所说的“tracing”是什么意思--“有人可以帮我tracing吗?”、“能够trace the program”等。Trace/Tracing通常用来表示debugging,你好像不是在说debugging。
-
好问题..我正在学习递归..即使在解决其他问题时也有类似的疑问。想知道这里发生了什么是个好主意。谢谢
-
我认为你可以很容易地解决这个问题,而无需使用递归。
-
Gooz,问题不在于尝试使用/不使用递归来解决问题。我试图了解递归的工作原理。这只是我正在使用的一个例子。任何帮助,将不胜感激。谢谢
标签: java string algorithm recursion