- なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
220 :デフォルトの名無しさん[sage]:2015/09/08(火) 09:50:01.65 ID:2c5lB4ny - >再帰処理ではないの?
なんかまじめに答えたくないくらいのレベルの話なんだが… まあNAS6は出来ることと出来ないことが極端に偏ってるのは分かったので一応まじめに答えとく。 丁寧に説明するのは一度だけだぞ。しかも普通の説明じゃなくてNAS6専用説明だ。 厳密な話をすると、処理と言うのがもし「単体」を指してるのなら、再帰処理なんてのはないんだよ。 再帰処理って言葉、(間違って使ってる場合は除いて)現場で使ってる人はほぼいないよな。 再帰関数と同じ意味で使ってる人ならたまに居るけど。 まずプログラムでの再帰と言うのは 「処理の移動経路(順序でも手順でもなんでもいい)」に対する「考え方」の一つだ。 これは考えかたの問題でもあるから、アセンブラやニーモニックをもちだして、「こう作ればこうなるから同じだ」なんてのは話がおかしくなる。 関数の話をしてる時に、アセンブラレベルで関数と言う仕組み自体を組み変えたら話しにならなくなるのと同じだ。 そして再帰と言うのは、再び帰ってくることだ。何がと言うと「処理が」だ。 しかもただ帰ってくるわけではない。実行手順の構造を保持しながら帰ってくるのだ。 普通は用意された関数の仕組みを使って、自動で再帰させることを再帰と呼ぶ。ここまでいいな。 当然、意図的にその処理手順を記録したスタックを操作するのが前提の考えならば、普通は再帰とは言わん。 しかも普通プログラムで再帰なのかどうか、と言うのは、「制御構造(関数とかforとかwhile)」 に対する物であって、 変数や代入に対するどうこうではない。(sumがどうこうって言ってたのは自分ひとりだけって事は気づいてるよな?) *2は実行手順のスタックは積んでないだろ。いったい何がどこに再帰してると思ったんだ? *1は自動でスタックに積まれるよな。分かるよな。その手順どおりに実行経路が決まって行ったり帰ったりするよな 冒頭の「再帰処理」については、 プログラムのsum = sum では左辺のsumが逆流して右辺のsumを定義することは (意図的にそうゆう言語を作らない限り) 有り得ない。 だから再帰とは言わない。数学や日本語は別だぞ 日本語で「sumとはsum」って言われると、左辺のsumの内容を調べるのに右辺に飛んで、右辺のsumの内容を調べるのに左辺に…永久に再帰する
|
- なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
221 :デフォルトの名無しさん[sage]:2015/09/08(火) 10:09:06.66 ID:2c5lB4ny - 別の言いかたをすると、再帰っつーのはその時点で再帰のためのスタックを考えなくても良い。
抽象化された関数と言う概念を使って、自動で再帰(スタック管理)させるのだから。 そのかわり、プログラマは再帰として抽象化された制御構造で考えることが出来る。 「出かける」と言う概念には「帰って来る」って概念もセットになるだろう。普通は。 当然その抽象概念が用意されてないアセンブラとかを使うと、めんどくさい限りだ。 スタックの容量は、コンピュータ資源の都合上で考えたくなったら考えるが、それはまた「全く別」のお話。
|
- なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
223 :デフォルトの名無しさん[sage]:2015/09/08(火) 10:16:12.90 ID:2c5lB4ny - やっぱまじめに相手するのやめたわ
|