アカウント名:
パスワード:
public void listRecurse(File directory) { for (File file: directory.listFiles()) { System.out.println(file.getPath()); if (file.isDirectory()) listRecurse(file); }}
キューを使う方法も知っておくと、今後の人生とメモリ使用量が豊かになるでしょう。
まて。スタックを使うのではなく?
あ、いや、FILOなコレクションを使うのではなく?という意味で。
幅優先探索のこと言ってるんじゃね?キューのメモリはヒープに取る希ガス。
ディレクトリツリーの幅優先か深さ優先かだからどちらもありだね。
典型的な再帰は実行位置も保存するスタックだけど、この手の再帰はタスクキューとしてループ化した方が実行位置の復元処理なんかが省略できてシンプルになります。サブの処理結果を呼び出し側の後続処理に使う場合はダメな場合が多いですが、そうでなければキューがおすすめです。キューからの取り出し順はFIFO(キュー)でもFILO(スタック)でも優先度付き云々でもぶっちゃけ構いません。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ソースを見ろ -- ある4桁UID
再帰呼び出しを必要とする例 (スコア:0)
public void listRecurse(File directory) {
for (File file: directory.listFiles()) {
System.out.println(file.getPath());
if (file.isDirectory()) listRecurse(file);
}
}
Re:再帰呼び出しを必要とする例 (スコア:2, 参考になる)
キューを使う方法も知っておくと、今後の人生とメモリ使用量が豊かになるでしょう。
Re: (スコア:0)
まて。スタックを使うのではなく?
Re: (スコア:0)
あ、いや、FILOなコレクションを使うのではなく?という意味で。
Re: (スコア:0)
幅優先探索のこと言ってるんじゃね?
キューのメモリはヒープに取る希ガス。
Re: (スコア:0)
ディレクトリツリーの幅優先か深さ優先かだから
どちらもありだね。
Re: (スコア:0)
典型的な再帰は実行位置も保存するスタックだけど、この手の再帰はタスクキューとしてループ化した方が実行位置の復元処理なんかが省略できてシンプルになります。
サブの処理結果を呼び出し側の後続処理に使う場合はダメな場合が多いですが、そうでなければキューがおすすめです。
キューからの取り出し順はFIFO(キュー)でもFILO(スタック)でも優先度付き云々でもぶっちゃけ構いません。