パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

再帰呼び出し、よく使う?使わない?」記事へのコメント

  • by Anonymous Coward on 2015年02月11日 18時37分 (#2759479)

    public void listRecurse(File directory) {
            for (File file: directory.listFiles()) {
                    System.out.println(file.getPath());
                    if (file.isDirectory()) listRecurse(file);
            }
    }

    • by Anonymous Coward on 2015年02月11日 19時09分 (#2759501)

      キューを使う方法も知っておくと、今後の人生とメモリ使用量が豊かになるでしょう。

      親コメント
      • by Anonymous Coward

        まて。スタックを使うのではなく?

        • by Anonymous Coward

          あ、いや、FILOなコレクションを使うのではなく?という意味で。

        • by Anonymous Coward

          幅優先探索のこと言ってるんじゃね?
          キューのメモリはヒープに取る希ガス。

        • by Anonymous Coward

          ディレクトリツリーの幅優先か深さ優先かだから
          どちらもありだね。

        • by Anonymous Coward

          典型的な再帰は実行位置も保存するスタックだけど、この手の再帰はタスクキューとしてループ化した方が実行位置の復元処理なんかが省略できてシンプルになります。
          サブの処理結果を呼び出し側の後続処理に使う場合はダメな場合が多いですが、そうでなければキューがおすすめです。
          キューからの取り出し順はFIFO(キュー)でもFILO(スタック)でも優先度付き云々でもぶっちゃけ構いません。

    • by Anonymous Coward on 2015年02月11日 20時04分 (#2759532)

      データ構造が再帰的なんだから
      アルゴリズムが再帰的になるのは当たり前

      元の主張は,意訳すると,反復処理をわざわざ再帰で書き直すことに意味が無いと言ってる.

      親コメント
      • by Anonymous Coward

        「再帰呼び出しの処理」なんだから当たり前だろう。
        「再帰的アルゴリズム」を教えたいのなら別でやれ。

      • by Anonymous Coward

        その理屈だと、連結リストはループで辿るべきではない……?

    • by Anonymous Coward

      ああ、俺もフォルダ階層潜る時にしかつかってないかも。。

    • by Anonymous Coward

      別に必要ではないな。真に必要な例はこういうの

      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));
      }

人生unstable -- あるハッカー

処理中...