における"う"カウントを再帰的アルゴリズムをJava?
-
09-06-2019 - |
質問
私は再帰的アルゴリズム段階を通じて、文字列の文字による文字を解析しを作成するツリー構造を有しております。こういうことができるように、文字インデックスのパーサは(エラーメッセージなど何もないといけないと心を実施するような要素からなるタプルを扱う複数の戻ります。
を使ってみました整数型を宣言した社外の方法に渡された再帰的方法での最後、再帰呼値の単位"忘れられた"私を返します。が実際に近いものであるかどうかと値の整数値に渡される値オブジェクト参照の点で新しいオブジェクト)
がわかりやすく伝えるための似たような仕事をしな汚染私のコードについて教えてください。
解決
以来、すでにみんな発見の疑似変更可能な整数"だけを、このオプション:
意味はあるいは別のパーサです。そうすれば、できる店舗の現状に会員に変更します。おそらくしていくかを考える必要がありますのでどうにも対応できるスレッドの安全性の問題かを失わせないアイテムでこの特定のアプリケーションですが、このおまかせください。
他のヒント
このようにハックをもつを使用しているAtomicIntegerを変更可能ないようなものです。私も見た場合のint[]のサイズ1が渡されます。
現在の溶液を使用してい:
int[] counter = {0};
そのパスでの再帰的アルゴリズム
public List<Thing> doIt (String aString, int[] counter) { ... }
やりたいときに増加す:
counter[0]++;
しないスーパーで優雅なものし---
整数は不変で、ときとして渡す引数でコピーを作成し参照ではなく、同じ商品です。(説明).
の挙動を探しに、自分のクラスのような整数のみ可変です。そして、通り過ぎで、再帰関数は増加の再帰時のアクセスで後に再度再帰する上でさまざまな新しい値です。
編集:このint[]配列はこの方法...Javaでは、配列した基準ではなくコピーのようなプリミティブまたは変更できます。
だけなのに用static intクラス変数を取得するたびに採番されおdoIt方法が呼び出されます。
このままい:
private int recurse (int i) {
if (someConditionkeepOnGoing) {
i = recurse(i+1);
}
return i;
}
正直思recodeの機能で線形アルゴリズムを使用します。このようにいないとのヒープスペースの場合はステッピングを通じて非常に大きな文字列になります。また、ねばならないことは起こらないってのパラメータについて()に適切なトラックの数です。
このものとは思いの結果、アルゴリズムの高速化おりませんので必要な機能通話毎に文字です。
ない限りのコースがあるので列に変換します。
がんは、店内のカウントにはメンバ変数のクラスです。このコースは、公共の doIt
方法はという単一のねじになります。
別のオプションは、refactorの公開方法で呼び民間の介助方法です。の方法が一覧としてのパラメータを返します。例えば:
public List<Thing> doIt(String aString) {
List<Thing> list = new ArrayList<Thing>();
int count = doItHelper(aString, list, 0);
// ...
return list;
}
private int doItHelper(String aString, List<Thing> list, int count) {
// ...
// do something that updates count
count = doItHelper(aString, list, count);
// ...
return count;
}
ことはできないエラーの取り扱いに公開 doIt
方法は、 count
変なガバナンスの呼び出し側に返します。がありますが、もちろん例外をスローす:
public List<Thing> doIt(String aString) throws SomeCustomException {
List<Thing> list = new ArrayList<Thing>();
int count = doItHelper(aString, list, 0);
// ...
if (someErrorOccurred) {
throw new SomeCustomException("Error occurred at chracter index " + count, count);
}
return list;
}
難しいかどうか確かめるなどのようにアルゴリズムを実際に作品。