
No.3ベストアンサー
- 回答日時:
再帰的な処理を再帰を使わずに実装するのは可能でしょう。
ただ、素直に再帰を使った方が簡単で、シンプルなことがほとんどかと思います。
ファイル検索について、キューで書いて見ました
(キューじゃなくてスタックでも同じ)
最初のディレクトリ名をキューに入れる
キューが空になるまでループ {
キューから1つディレクトリ名を取り出す
そのディレクトリ内を検索 {
もしディレクトリならキューに入れる
ファイルなら表示するなど
}
}
キューやスタックをどう実装するかは、いろいろでしょう。
配列で楽しようとすれば、#2の方の「処理回数に制限」がつきます。
No.4
- 回答日時:
No.2のymmasayanです。
>階乗計算に再帰を使う例が良く出てきますが、実際には再帰を使わなくても
>プログラムは出来ます。
そのとおりです。再帰の例題にでてくるのは却って再帰の必要性に疑問を持たせる
ものばかりです。再帰でなくても簡単に書けてしまうからです。
今回のファイル一覧表示もNo.3の方が示された形で簡単に出来てしまいます。
しかしBASICのようにキューもスタックもない言語では配列を使って
擬似的にキューかスタックを作らねば成らず、相当な苦労を伴います。
これらよりももっと複雑な(多変数を扱うような)ものではさらに大変に成るでしょう。どこまでを可能といい、どこからを不可能というか難しいところですね。
結局答えに成りませんでした。
No.2
- 回答日時:
再帰処理を厳密に考えると可能な言語はかなり限られます。
特に古い言語やご指摘のBASICは再帰処理に対応していません。
GOSUB、RETURNを何重にもネストで書けば再帰処理と同じことは
出来ますがこれは再帰処理とは言いません。
再帰処理とは実行中のルーチンの途中からGOSUB(CALL)でそのルーチンの
トップに飛び込みこれを何回でも繰り返せるものです。
再帰処理を使わずに同じようなことはできると書きましたが、実際のプログラムは
結構大変です。処理回数に制限がつくこともネックです。
この回答への補足
改めて、質問を整理しますと、
例えば、階乗計算に再帰を使う例が良く出てきますが、実際には再帰を使わなくてもプログラムは出来ます。
それと同じように、サブフォルダがいくつあるか分からないのに、再帰を用いずサブフォルダまで含め、ファイル一覧を表示するプログラムは出来るのでしょうか?
お願いいたします。
この回答へのお礼
お礼日時:2003/05/12 20:22
回答ありがとうございました。
質問は、再帰を用いずに再帰と同様の効果が得られるプログラムは書けるのか?ということですが、
貴殿の回答は、#1さんとは異なり、処理回数に制限がつく等で出来ないとう事ですね。
No.1
- 回答日時:
BASIC(VBを含まない)で再起処理出来ないという訳ではないと思います。
gosubやreturnを使えば良いわけですから。
但し、C言語の様にローカル変数やグローバル変数という概念が無く、すべてグローバル変数の様に扱われるからだと思います。
再起を使わないでやる場合は、上位ディレクトリに戻る際に、再度ディレクトリの中を検索くして、次のディレクトリを探して移動といった事を行わなくてはなりませんので、かなり処理に無駄がありますね。
それ以外だとすれば、配列に入れておくという事も出来ますが、1次元配列しか作れなかったと思いますので、親ディレクトリのすべてのファイルやディレクトリを保持しておくのは難しいですね。
とは言ってもCで再起で書いても
_dos_findfirstや_dos_findnextが再起で正常に動作するかは不明ですね。
正常に動作させるには、カレントディレクトリのファイルやディレクトリを配列に保存しておかなくてはなりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するQ&A
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
順列の内容をすべて表示するプ...
-
5
2のべき乗か調べる方法
-
6
C言語 再帰処理のメリットとデ...
-
7
【C言語】再帰が時間がかかる...
-
8
行きがけ順で表示するプログラム
-
9
フィボナッチ数列のプログラム
-
10
C言語プログラミングについて ...
-
11
nCrの計算
-
12
漸化式のプログラミングについ...
-
13
nCmの関数
-
14
フィボナッチ数列 プログラミ...
-
15
最大公約数を求めるプログラム
-
16
再帰関数でポインタのインクリ...
-
17
分数の足し算をさせるプログラ...
-
18
C言語のプログラムについて質問...
-
19
再帰関数を用いて配列の合計を...
-
20
sinのマクローリン展開