1

この質問は以前にも聞かれたことがあると思いますが、私が考えていた具体的な例があります。現在、私は自分の作業端末にいないため、一種の擬似コードのコードを持っています:

void setTree(string dir) {
    add dir to dirlist
    create dir object //contains list of subdirs and files
    for subdir in dir.subs do
        setTree(subdir)
    end
}

コンパイル時にサブディレクトリがいくつあるかをコンパイル時に知ることができないため、これは for ループだけで行うことができますか? 疑似コードは問題ないか、何らかの説明またはアルゴリズムです。再帰的なソリューションが一番好きなので、本当に何も必要ありませんが、それが可能かどうか知りたいです。その背後にある理論と同様に。

4

2 に答える 2

2

理論については、ここで最も投票された回答を参照してください:すべての再帰を反復に変換できますか?

特に:

void setTree(string dir) {
   add dir to dirlist
   while (dirlist not empty) {
   d = dirlist.pop()
   create d object
   for subdir in d.subs do
      append subdir to dirlist
   end
   }
}

疑似コードの奇妙な構文の混同を追跡しようとしましたが、まだ読めることを願っています。

于 2013-08-04T16:38:14.703 に答える
1

それは dir クラスの設計に依存します。サブディレクトリが配列またはリストに保存されている場合、for ループの最大値として使用できるサイズ値があります。その値は実行時に定義されます。サブディレクトリが保存されている場合は、おそらくwhileループを使用する必要があります。

ChronosMOTに役立つことを願っています

于 2013-08-04T16:46:10.250 に答える