- ベストアンサー
再帰処理の考え方について詳くかかれたサイトありますか?
再帰処理でフォルダ内のファイルを全検索するプログラミングを作成するために、色々と調査をしております。 (言語はVC++です) しかし、「再帰」についての概念のかかれたサイトは高度な内容ばかりで、どのように再帰のコードを作ったら目的が達成できるのか、予想がつきません。 「再帰」について、噛み砕いた説明のあるサイトをご存知の方はおられますでしょうか? ヒントだけでかまいません、お知恵を拝借、どうかよろしくお願い申し上げます。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- PHP初心者 再帰処理について
あるフォルダ以下に含まれる全てのフォルダ名をフルパスですべて列挙するという処理を描こうと下記のブログを参考にして自分で少し書き換えたのですが、うまくいきません。 http://blog.asial.co.jp/12 <参考にした部分> function getFileList($dir) { $files = scandir($dir); $files = array_filter($files, function ($file) { // 注(1) return !in_array($file, array('.', '..')); }); $list = array(); foreach ($files as $file) { $fullpath = rtrim($dir, '/') . '/' . $file; // 注(2) if (is_file($fullpath)) { $list[] = $fullpath; } if (is_dir($fullpath)) { $list = array_merge($list, getFileList($fullpath)); } } return $list; } </参考にした部分> <自分で変更したコード> function getFileList($dir) { $files = scandir($dir); $files = array_filter($files, function ($file) { // 注(1) return !in_array($file, array('.', '..')); }); $list = array(); foreach ($files as $file) { $fullpath = rtrim($dir, '/') . '/' . $file; if (is_dir($fullpath)) { $list[] = $fullpath; $list[] = array_merge($list, getFileList($fullpath)); } } return $list; } </自分で変更したコード> 変更といってもis_fileの部分の削除と$list[] = $fullpath;を追加しただけなのですが、「~ bytes exhausted」というエラーになってしまいます。 再帰関数が内部的にどういう処理をしているのかよくわかってないので、正直変更したコードがどういう動きをしているのかいまいち理解できません。参考書にある再帰関数は腑に落ちないながらも結果としてはそうなるということは理解しました。 あとそれ以前に $files = array_filter($files, function ($file) { return !in_array($file, array('.', '..')); の部分がわかりません。 scandirの戻り値には要素の最初の方に「.」と「..」が付くのでそれを削除する目的だとブログにはありますが、in_arrayはただ第一引数のものを第二引数から検索するだけのはずなのに、$filesの中身をarray_filtersの処理後に確認してみるとちゃんと「.」と「..」が削除されていて不思議です。あとin_arrayは第一引数のものを第二引数の中から検索するという関数だと思いますが、なぜそれをわざわざ反転させて((array('.', '..'), $file);じゃなく($file, array('.', '..'));)!in_arrayとしてるんでしょうか? *ちなみに引用したブログのコードの動作は確認済みで元のコードは完全に正しいです。引用したコードに文句をつけているわけではなく自分がわかっていないだけです。(^^ゞ 以上です。よろしくお願いします。
- ベストアンサー
- PHP
- 各種プログラミング言語のコードを検索できるサイト
どこかで、各種プログラミング言語のコードを検索できるサイトが紹介されていたのをメモしたつもりでしたが見つかりません。 どなたかサイトを教えてください。
- ベストアンサー
- Java
- プログラムの作り方
みなさんは目的のプログラムを作り上げるために、どういった手順を踏みますか? それと、目的の達成率というのはどのくらいですか? 自分の技量によって到達点を変更しますか?または作り上げますか? 私は ・目的に合ったプログラミング言語を探す。 ・その言語の入門書を読む。 ・目的に近い内容のプログラミング解説書を読む。 ・それでも足りない部分は、自己流でなんとかする。 という手順を踏んでます。 でも、思い通りの形に作れないことが多いです(涙 または、道のりが遠すぎて挫折します。
- ベストアンサー
- その他(プログラミング・開発)
- Visual C++ 2005 Express Edition
あるC言語をつかったウィンドウズプログラミングの本に載っていたコードを入力してビルドしようとしたら色々とエラーが出てしまい、今度はその本に付属していたCD-ROMに収録されていたコードを使ってビルドしても失敗してしまいました。 そして、その本を書いてらっしゃる方が管理をしているホームページにVC2005になってデータ型のチェックが厳しくなったと書いてありました。 そのサイトには新しくVC2005のサンプルプログラムが紹介されていたのですが、本に載っていたものとは少し違うようです。しかし、それを使ったら難なくビルドも出来て、ちゃんとウィンドウが表示されました。 ということは、今までに出版された本に載っているウィンドウズプログラミングのコードはVisual C++ 2005 Express Edition では使えないということなんでしょうか。 もし知っていらっしゃる方がいましたら、教えてください。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 目的に適しているプログラミング言語等を教えて下さい。
目的に適しているプログラミング言語等を教えて下さい。 メイン言語「Visual Basic 6.0」、データベース「Microsoft ACCESS 2000」で作成された生徒管理及びレッスン自動予約システムがあり、現在はネットワークHDDに置いて運用しています。 目的はこれをウェブ上(レンタルサーバやクラウド)に置き、同じように運用することは可能か否か?またウェブ上で運用するとなると現在のACCSESSだと不可&全く新しく作り直すことになるだろうと思いますが、目的に適ったプログラミング言語や必要な知識、概念などはなんなのか?検索しても完全に「?」ですので質問させて頂きました。 現在プログラミングの知識は乏しい(html,CSS)ですが、必要であれば身につけようと考えています。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- プログラミングを学びたい。
プログラミングについて学びたいと考えているのですが、 私は具体的にどういった事をすればよいのでしょうか。 自身でも色々と調べているつもりですが、この手の事については無知で、 どこから手を付けてよいやら、という様な右も左も分からない状態です。 質問1 . プログラミングの基本というか、流れと言えばいいか、 プログラミングの概念的なものを理解する為にはどうすれば良いんでしょう。 質問2 . 簡単なソフトウェアやゲームを作れるようなレベルに至るまでに 苦労する事とはどういった物が挙げられるんでしょうか。 質問3 . 言語というものがいくつかあるらしいのですが、 初めにどれを学ぶ事が望ましいのでしょうか。 質問4 . 私のような無知者向けの役に立つサイトや書籍を教えて下さい。 (可能ならあまり本には頼らずサイトから知識を得たいのですが…) 全くの素人なのでおかしな質問もあるかもしれません。 又、すべてにお答えいただかなくても構いません、 何かヒントの様なものでもいただけないでしょうか、よろしくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- ソートの順番を変える処理
現在、C言語の勉強をしています。 そこで、ソートについて皆さんのお知恵を拝借させてください。 文字コードで大小を比較してソートを行うにあたり、文字コードの大小とは違う方法でソートしたい場合はどのように行えば良いでしょうか? 例えばASCIIコードで 「*」は42(0x2a)、 「#」は35(0x23)、 数字の「0」は48(0x30)なので、 1:*111 2:#222 3:333 というデータがあった場合、文字コード順だと 1:#222 2:*111 3:333 という順になってしまいます。 それを 1:*111 2:#222 3:333 という順にソートするにはどうしたら良いのでしょうか? 実装方法が全く分からず、同じような質問が無いか探してみたんですが、見当たらなくて困っています・・・。 有識者の方、どうかよろしくお願いいたします。 また、以上のデータはASCIIですが、他にもSJISの文字(ひらがなや全角英数)を使用するデータのソートも同様の処理を行いたいと思っております。もし可能でしたら、少しだけでもアドバイスをお願いいたします。
- 締切済み
- C・C++・C#
- 定義済み関数を用途別に逆引きしたい
ボクはプログラミングに関してほぼ初心者で、 プログラミングの基礎はC言語だと聞いたので、C言語の入門本に取り掛かり変数や構造体や関数などの概念を学んだ上で、既存のウィンドウズ付属の定義済み関数を組み合わせてプログラミングしてみようと思ったのですが、一つの疑問が浮かび上がりました。 「定義済み関数を使うには、その関数を知っていることが前提条件なのか?それらは用途や目的など何らかの形で分類されていなくて、ただ漠然と並べられているのか?ボクはいくつ関数を覚えればいいんだ…?orz」という疑問です。 質問する前にボクなりに調べましたが、もしかしてこの「関数を用途や目的等別で分類する」とはオブジェクト指向の「クラス」にあたるのでしょうか?だとすれば、次にボクはオブジェクト指向のプログラミングを学ぶべきでしょうか?
- 締切済み
- C・C++・C#
- C#によるWPF その3
ExpressionBlendとVCを使ってWPFアプリケーションの開発を行っています.言語はC#です. 現在, MouseLeftButtonDown ⇒ MouseLeftButtonUp の順でRectangleを描画することは出来るのですが, 現状ではMouseLeftButtonUpのイベントが終了するまで描画結果が表示されません. 目標として, MouseLeftButtonDown後した座標を原点としたRectangleを MouseLeftButtonUpのイベントが起こるまで描画し続けたいのですが何か良い方法は無いでしょうか??(ラバーバンド??) やり方が悪かったのか, MouseMoveの間,描画し続ける方法も上手くいきませんでした. 目標さえ達成できれば,方法にはこだわりません. ヒントになるようなアドバイスを頂けないでしょうか?? 知恵を貸して下さい. 宜しくお願いします!!
- ベストアンサー
- その他(プログラミング・開発)
- HL-L2365DWプリンターがディープスリープから解除されないトラブルに直面中。
- Windows10環境で無線LAN接続のプリンターが印刷できない問題を解決したい。
- ひかり回線利用時のディープスリープ解除方法についての相談。
お礼
Oh-Orange様> ご回答が遅くなり、大変申し訳ございませんでした。 事例もありがとうございました! 中々、イメージが掴めなくて、色々なURL読んで漸く、どういうことか解ってきました。 本当に助かりました。