Javaの再帰に問題があります。問題は次のようなものです。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);
}
}
Iの点で最大のプログラムをトレースすることができました私はそれを完全に辿ることができません。
場合、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 |
| |
| |
|________|
どのようになり、私が上記したものの後にプログラムの仕事?誰かがそれをトレースするのを助けることができますか?ありがとう。
するとあなたは** **再帰を使用する必要がありますか? – Gooz
私はあなたが "** tracing **"の意味を理解していません - "誰かが私を助けることができますか?"、 "プログラムをトレースできるかどうか"など。トレース/トレースは通常_debugging_を意味します。デバッグについて話しているようではありません。 –
良い質問..この時点で再帰を学習していますが、他の問題を解決している間も同様の疑問がありました。ここで何が起こっているのかを知ることはいい考えです。ありがとう –