- ベストアンサー
再帰処理の考え方について詳くかかれたサイトありますか?
再帰処理でフォルダ内のファイルを全検索するプログラミングを作成するために、色々と調査をしております。 (言語はVC++です) しかし、「再帰」についての概念のかかれたサイトは高度な内容ばかりで、どのように再帰のコードを作ったら目的が達成できるのか、予想がつきません。 「再帰」について、噛み砕いた説明のあるサイトをご存知の方はおられますでしょうか? ヒントだけでかまいません、お知恵を拝借、どうかよろしくお願い申し上げます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★追記。 ・C言語ですが分かりやすそうなサイトを発見しましたので紹介します。 http://itpro.nikkeibp.co.jp/article/COLUMN/20061115/253812/→『第7回 再帰処理と参照渡し(モドキ)のメリット・デメリット』 http://www.geocities.jp/ky_webid/c/056.html→『C言語編 第56章 再帰呼び出し』 http://www1.cts.ne.jp/~clab/Contents/Recindex.html→『言語講座:関数の再帰呼出し』 http://www4.plala.or.jp/tamo/algo/09recursive.pdf→『データ構造・アルゴリズム No.09 再帰』 ・以上。参考にして下さい。
その他の回答 (2)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス >「再帰」についての概念のかかれたサイトは高度な内容ばかりで… ↑ そんなに高度ですか? 多分は『再帰処理』の概念がもてないだけでしょう。 あるいはサンプルばかりで実用的な再帰処理を記述したことがないか。 >「再帰」について、噛み砕いた説明のあるサイトをご存知の方はおられますでしょうか? ↑ 『c 再帰処理』キーワードでネット検索したら直ぐに下のサイトが見つかりました。 http://homepage2.nifty.com/sak/w_sak3/doc/syspc/c_k09.htm→『再帰呼び出し処理 - ディレクトリ検索』 お探しの再帰処理でのディレクトリ検索です。 ただし、ちょっと分かりづらい気がしますね。 >再帰処理でフォルダ内のファイルを全検索するプログラミングを作成するために、色々と調査をしております。 ↑ 私なら次のように全ファイルの検索を行います。 やっぱり再帰処理ですけど。 サンプル: // カレント・ディレクトリの再帰検索 VOID findListSubdir( LPTSTR lpPath ) { WIN32_FIND_DATA fdFile; HANDLE hFind; LPTSTR lpWild; lpWild = PathAddBackslash( lpPath ); lstrcpy( lpWild, TEXT("*.*") ); if ( (hFind = FindFirstFile(lpPath,&fdFile)) != INVALID_HANDLE_VALUE ){ do { if ( fdFile.cFileName[0] != '.' ){ if ( fdFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ){ lstrcpy( lpWild, fdFile.cFileName ); findListSubdir( lpPath ); // 再帰呼び出し /* fdFile.cFileNameにフォルダ名 lpPathにフォルダのフルパス名 */ } else{ lstrcpy( lpWild, fdFile.cFileName ); /* fdFile.cFileNameにファイル名 lpPathにファイルのフルパス名 */ } } } while ( FindNextFile(hFind,&fdFile) ); FindClose( hFind ); } lpWild[ -1 ] = '\0'; } 使い方: int main( void ) { TCHAR szPath[ MAX_PATH ] = TEXT("C:\\"); findListSubdir( szPath ) return 0; } その他: ・上記のサンプルでは C:\ の配下のディレクトリをすべて検索しています。 表示は printf 文などがないので検索のみです。 必要に応じて printf 文を記述すれば全ファイルを検索表示されます。 記述場所はコメントの部分で『fdFile.cFileName』か『lpPath』を表示するようにします。 ・以上。
- zwi
- ベストアンサー率56% (730/1282)
再帰で単純というならこれかな? http://www.ic-net.or.jp/home/takaken/pz/pz2/page23.html ただし、サブディレクトリに再帰を使うのは良いですが、ファイル自体を再帰で処理するのはお勧めできません。すごく処理効率が悪いですよ。 単なるwhileループで処理できると思いますけど。
お礼
zwi様> ご回答ありがとうございました! お礼が遅くなってしまって申し訳ございません。 サブフォルダだけ…等々の意味が、お教えいただいたサイト等を読んで、ようやく解ってきました。
お礼
Oh-Orange様> ご回答が遅くなり、大変申し訳ございませんでした。 事例もありがとうございました! 中々、イメージが掴めなくて、色々なURL読んで漸く、どういうことか解ってきました。 本当に助かりました。