質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

5回答

23509閲覧

「再帰的」の意味がわかりません

fermat

総合スコア183

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

1クリップ

投稿2019/01/08 09:02

サブディレクトリを再帰的に削除します。
ディレクトリを再帰的に作成します。

この2つの「再帰的」の意味がわかりません。
「フォルダの中身全て」みたいな意味なのでしょうか?

フォルダ作成に際して、
「ディレクトリを再帰的に作成する」オプションを入れると
フォルダを最下位層まで一気に作れるということはプログラミングしているうちに
何となく理解したのですが、プログラミング用語の「再帰的」って何なのでしょうか?

wikipediaには
「再帰(さいき)は、あるものについて記述する際に、記述しているものそれ自身への参照が、その記述中にあらわれることをいう。」とあったのですが・・・。
ますます意味が分からなくなってしまいました・・・。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

たとえば、
dir /S
を実行すると、ファイルのディレクトリ情報を読み出して順番に表示させます。
そして、ファイルじゃなくディレクトリであった場合、そのディレクトリに移動して、
ファイルのディレクトリ情報を読み出して順番に表示させ、
ファイルじゃなくディレクトリであった場合はそのディレクトリに移動して、
ファイルのディレクトリ情報を読み出して(以下略

とまあ、ディレクトリに出会うたび、同じ処理を最初からやり直す、という動作となり、これがまあ、再帰的動作、ということになります

まー、この同じ動作をプログラムでさせようと思ったときに、どういうふうにするかを考えると再帰、という動作がどういうことかよくわかるんですが。

投稿2019/01/08 09:28

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fermat

2019/01/09 04:32

再帰が「階層全部」なんて間違った理解をしていました。 「ディレクトリに出会うたび、同じ処理を最初からやり直す」動作をしているんですね。 ありがとうございます。
y_waiwai

2019/01/09 04:38

そういうふうに処理を繰り返すことで、結果、それ以下の階層全部の処理を行うようになりますね
guest

0

ベストアンサー

「再帰」とは、ある機能の処理の中でその機能の中で使うことを指します。

質問文にあるディレクトリ削除を例に取りましょうか。
ディレクトリの削除は以下の機能となっています。

  1. 指定されたディレクトリの中のファイルを全て削除
  2. 指定されたディレクトリを削除

では、以下のようなディレクトリがあったとして、

A_DIR/B_DIR/C_DIR/D.txt

A_DIRを削除しようとするとB_DIRを削除しなければなりません。
B_DIRを削除しようとするとC_DIRを削除しなければなりません。

この場合の再帰的というのは、削除機能の中で削除機能を使うということです。

A_DIRを削除する場合、以下のような流れで削除されます。

  1. A_DIRの中にB_DIRがあるので先にA_DIRの削除機能がB_DIRを削除する
  2. B_DIRの中にC_DIRがあるので先にB_DIRの削除機能がC_DIRを削除する
  3. C_DIRの中のD.txtを削除する
  4. C_DIRが削除される
  5. B_DIRが削除される
  6. A_DIRが削除される

投稿2019/01/08 09:37

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fermat

2019/01/09 04:32

再帰的な削除で何が起きているのか一つ一つのステップを解説してくださることで 「ある機能の処理の中でその機能の中で使う」がどういったことなのか理解できました。 ありがとうございます。
guest

0

あるサブディレクトリを削除する時に、そのサブディレクトリの下に更にサブディレクトリがあった場合は、そのサブディレクトリも削除する、そのサブディレクトリの下に更にサブディレクトリがあったら・・・、と、サブディレクトリを削除するという処理を繰り返すことを「再帰的」に行うことを言います。
通常、自分で自分を呼び出すことで実現します。
サブディレクトリは無限にあるわけではないので、どこかで再帰呼び出しは止まりますので、無限ループにはなりません。
ただ、スタックを消費するのでメモリ不足には注意です。

再帰呼出し

投稿2019/01/08 09:26

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fermat

2019/01/09 04:33

リンク先がとても面白かったです。 「再帰」で起きていることが図形化して理解できました。 処理の中で処理が呼び出され、さらに呼び出されっていうことの繰り返しなんですね。 ありがとうございます。
guest

0

「ディレクトリを再帰的に」の意味を意訳すると

「ディレクトリの中の中の中の中の~」と言った感じです。

1、ディレクトリの中(直下)のファイル・ディレクトリの一覧を取得 2、各ファイルorディレクトリに何らかの処理

と言った処理を行っている為、サブディレクトリも含める場合は1~2の処理を検出された子ディレクトリ毎に繰り返す(再帰する)形になります。

プログラム的に言えば、「とある関数Aの処理の中で自分自身(A)を呼び出す。」と言った形です。

大体ですがそんな感じです。

投稿2019/01/08 09:24

編集2019/01/08 09:27
uya

総合スコア52

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fermat

2019/01/09 04:34

wikipediaの説明よりも「ディレクトリの中の中の中の中の~」の方が 直感的でわかりやすかったです。(wikipediaごめん) ありがとうございます。
guest

0

ファイル階層は再帰的なデータ構造の一つです。
再帰的データ扱うには、再帰的な方法を扱うのが適しています。

再帰は、いろいろなところに現れます。マトリョーシカ人形や、巻き貝の螺旋など。

Thinking Recursively with Java https://www.amazon.co.jp/dp/0471701467

ゲーデル、エッシャー、バッハ https://www.amazon.co.jp/dp/4826901259
を読むとよいです。

アフリカのデザインに潜むフラクタル
https://www.ted.com/talks/ron_eglash_on_african_fractals/transcript?language=ja
も面白いかもしれません。(日本語字幕)

投稿2019/01/08 13:49

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fermat

2019/01/09 04:32

「再帰」って日本語にもともと無い概念らしいですね。 哲学なども含め、幅広く言葉の意味を知っておくことも大切と思いました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問