アカウント名:
パスワード:
public void listRecurse(File directory) { for (File file: directory.listFiles()) { System.out.println(file.getPath()); if (file.isDirectory()) listRecurse(file); }}
キューを使う方法も知っておくと、今後の人生とメモリ使用量が豊かになるでしょう。
まて。スタックを使うのではなく?
あ、いや、FILOなコレクションを使うのではなく?という意味で。
幅優先探索のこと言ってるんじゃね?キューのメモリはヒープに取る希ガス。
ディレクトリツリーの幅優先か深さ優先かだからどちらもありだね。
典型的な再帰は実行位置も保存するスタックだけど、この手の再帰はタスクキューとしてループ化した方が実行位置の復元処理なんかが省略できてシンプルになります。サブの処理結果を呼び出し側の後続処理に使う場合はダメな場合が多いですが、そうでなければキューがおすすめです。キューからの取り出し順はFIFO(キュー)でもFILO(スタック)でも優先度付き云々でもぶっちゃけ構いません。
データ構造が再帰的なんだからアルゴリズムが再帰的になるのは当たり前
元の主張は,意訳すると,反復処理をわざわざ再帰で書き直すことに意味が無いと言ってる.
「再帰呼び出しの処理」なんだから当たり前だろう。「再帰的アルゴリズム」を教えたいのなら別でやれ。
その理屈だと、連結リストはループで辿るべきではない……?
ああ、俺もフォルダ階層潜る時にしかつかってないかも。。
別に必要ではないな。真に必要な例はこういうの
unsigned ack(unsigned x, unsigned y) { // 本当は多倍長整数でないとあっという間にオーバーフローするが if (x == 0) { return y + 1; } if (y == 0) { return ack(x - 1, 1); } return ack(x - 1, ack(x, y - 1));}
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常
再帰呼び出しを必要とする例 (スコア: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(スタック)でも優先度付き云々でもぶっちゃけ構いません。
Re:再帰呼び出しを必要とする例 (スコア:1)
データ構造が再帰的なんだから
アルゴリズムが再帰的になるのは当たり前
元の主張は,意訳すると,反復処理をわざわざ再帰で書き直すことに意味が無いと言ってる.
Re: (スコア:0)
「再帰呼び出しの処理」なんだから当たり前だろう。
「再帰的アルゴリズム」を教えたいのなら別でやれ。
Re: (スコア:0)
その理屈だと、連結リストはループで辿るべきではない……?
Re: (スコア:0)
ああ、俺もフォルダ階層潜る時にしかつかってないかも。。
Re: (スコア:0)
別に必要ではないな。真に必要な例はこういうの