なあ、再帰関数好きな人いる? パート2 [転載禁止]©5ch.io
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2015/09/06(日) 17:35:49.88ID:8kAWPtv+http://ews2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/Recursive.html
★再帰を使わない例
この階乗関数を Basic プログラムとして実現してみると,
(Tiny Basic には階乗関数 Factorial が内蔵されていますから,
実際にこのようなプログラムを書く必要はありませんが。)
Function Kaijyou(n)
If n = 0 then
Kaijyou = 1
Else
Kaijyou = Kaijyou(n-1)*n
End if
End Function
となります。しかし,実は階乗関数は,再帰を使わなくても,
次のように実現することが出来ます。
Function Kaijyou(n)
F = 1
For i = 1 to n
F = F * i
Next i
Kaijyou = F
End Function
↑再帰を使わなくても,次のように実現することが出来ます。
0809デフォルトの名無しさん
2015/11/06(金) 10:09:10.72ID:iLvLfKdXなんだそりゃ。
そりゃマルチスレッドなら、スレッド毎にスタックフレーム確保するだろ。
それこそ、勝手スタックと同じでな。
疑問に思ったら、メイン関数で再帰して何回目で死ぬかと、
スレッド2つ起こして、そのスレッド内で再帰呼び出し呼んで何回目で死ぬかを比較して見ればいいよ。
ついでに/procの中身も見ればわかりやすい。
スタックの成長方向に関しては、だいたい下位方向だよ。
だからバッファオーバーランで任意の関数を呼ぶって攻撃が成り立つ。
0810デフォルトの名無しさん
2015/11/06(金) 10:47:43.57ID:iLvLfKdXヒープに確保したスタック、ってのは、ヒープに参照を確保してメモリのどこかに確保したスタック、なのかな。
そりゃそのスタックはアウトオブメモリまで使えるわな。
違う機械語にもなるだろうな。多段の間接アドレッシングするクソ遅くて不安定な機械語に。
それでも根本的解決をせずに、マージン確保して死ぬのを先延ばしにしてるだけだけど。
まともな解法のためにまともに組んだ再帰ではそんなこともないし、
そうではない再帰の事言ってるんだろうけど、それは「ループは無限ループする可能性があるから危険」くらい暴論。
0811デフォルトの名無しさん
2015/11/06(金) 11:12:47.56ID:LVZwl1iK> ヒープが下から、スタックフレームが上から、同じメモリを食ってくんだから。
こういう迷信信じ込んでる老害が一番厄介。
#include <stdio.h>
int x;
int main()
{
int z;
printf("%p %p %p\n", &x, &main, &z);
}
Windows7/64での実行結果
000000013F63DB38 000000013F6211E0 00000000002CFB80
手元ですぐ確認できるのはWindows7しかないけど、大抵の64ビットOSは
プライマリスレッドのスタックサイズは固定サイズでリンク時に決定だよ。おじいちゃん。
実メモリをコミットするのはまた別の話。
0812デフォルトの名無しさん
2015/11/06(金) 12:54:51.54ID:ldVrSRAZヒープが何かもわかってないゆとりかよ w
0813デフォルトの名無しさん
2015/11/06(金) 12:56:48.83ID:iLvLfKdX迷信ではなくて、単に環境依存だろ。
んなもんリンカで決まるし、ましてやWindows7ならASLR効いてるんじゃねーの?
基本知らないで話してるわけでもあるまいし、なんか釣ってるの?
0814デフォルトの名無しさん
2015/11/06(金) 13:29:16.84ID:LVZwl1iKzのアドレス00000000002CFB80が何を意味してるか分かるか? わかんねーだろうな。バカだから。
2,947,968番地って事だ。
ジジイが信じている迷信は
> ヒープが下から、スタックフレームが上から、同じメモリを食ってくんだから。
って事だが、スタックが上から使って言って残り3M以下なんだが、ヒープは何メガ使えるんだ? 爆笑。
0815デフォルトの名無しさん
2015/11/06(金) 14:09:49.10ID:+7OfKum10816uy ◆Qawu9.2l1E
2015/11/06(金) 14:35:20.47ID:44+lavHA0817デフォルトの名無しさん
2015/11/06(金) 14:54:15.84ID:W6j+1tCI0818デフォルトの名無しさん
2015/11/06(金) 14:55:35.21ID:W6j+1tCI0819デフォルトの名無しさん
2015/11/06(金) 15:15:31.42ID:LVZwl1iKF77じいさんはオムツの特売に並んでろ。
0820デフォルトの名無しさん
2015/11/06(金) 15:21:45.27ID:LVZwl1iKlinux忘れてたわ。突っ込まれる前に訂正。
プライマリスレッドのスタックサイズは固定サイズで起動時に決定だよ。おじいちゃん。
0821デフォルトの名無しさん
2015/11/06(金) 15:38:37.42ID:VF1V1DpN> ヒープが下から、スタックフレームが上から、同じメモリを食ってくんだから。
> ヒープが溢れると、スタックフレームも溢れてるし、
> スタックフレームが溢れるという事はヒープも溢れてる。
> 実際問題全く同じなのに。
これもうこの発言で終了じゃね?
0822デフォルトの名無しさん
2015/11/06(金) 15:44:51.97ID:iLvLfKdXそらそうだろう。
グローバル変数は.dataないし.bssに落ちて、
関数は.textに落ちて、そいつらはその辺のアドレスになるだろ。
メインスレッドのスタックは俺の環境でもその辺で、かつエントリポイントのヒープもその辺だわな。
固定サイズ、って、どこから固定サイズかわかってるのかなぁ。
デバッガで見てみりゃすぐわかるのに。
0823デフォルトの名無しさん
2015/11/06(金) 15:56:30.79ID:VF1V1DpNwwwww
0824uy ◆Qawu9.2l1E
2015/11/06(金) 16:11:44.79ID:Bw8X18sC味方にした国が負ける
0825デフォルトの名無しさん
2015/11/06(金) 18:19:40.96ID:ldVrSRAZで、ヒープはどこに行ったんだよ…
まさか 16進数の読み方でしかドヤれないのか w
0826デフォルトの名無しさん
2015/11/06(金) 18:26:57.75ID:iLvLfKdXヒープが溢れるという事はスタックフレームが溢れるのと同じ事、かな。
virtualallocやらしてりゃ別だけど。
要はスタックフレームは無視して、ヒープに勝手にスタック作ってそれを使って処理すれば再帰は要らなくて、
ループで処理出来る、って言いたいんだろうね。
どう考えても向いてない事も、ループでオッケー、と。
0827デフォルトの名無しさん
2015/11/06(金) 18:28:00.11ID:iLvLfKdXドヤってる訳じゃないけど。
自分で見てみれば?
0828デフォルトの名無しさん
2015/11/06(金) 18:58:03.51ID:ldVrSRAZいや、だからどこにヒープがあるんだよ
.bss, .data, .text とかはヒープって言わんぞ
0829デフォルトの名無しさん
2015/11/06(金) 19:08:39.94ID:LVZwl1iKお前、壊滅的に頭悪いな。
スタックが最下位の3Mにあるわけだ。さて、ヒープはどこにあるでしょう?
スタックより低アドレス? → スタックとヒープ合わせて3Mしか使えない。 大爆笑
スタックより高アドレス? → ↓これが嘘。 大爆笑
> ヒープが下から、スタックフレームが上から、同じメモリを食ってくんだから。
0830デフォルトの名無しさん
2015/11/06(金) 19:22:13.10ID:LVZwl1iKちげーよ。バカ。
プライマリスレッドのスタックは固定サイズ。
おじいちゃん達が現役だった頃と違ってヒープと奪い合わない。
Win64は先に示した通り。スタックは最下位に置かれる。
他のOSでも共有ライブラリなどの為にアドレス空間が予約されるので、ヒープとスタックは隣り合った領域には配置されない。
0831uy ◆Qawu9.2l1E
2015/11/06(金) 19:24:34.00ID:ctWMnKjq0832デフォルトの名無しさん
2015/11/06(金) 19:56:02.79ID:ZTXinl+H0833デフォルトの名無しさん
2015/11/06(金) 20:05:49.78ID:Jbsw4Wxaコレクションに対して繰り返し処理をする方法で、こんな分け方をしてみた
1. C の for 文のように添字を使って繰り返す。いわゆるループ
2. Java の拡張 for 文のように添字を使わないで繰り返す。1と3の中間
3. 高階関数を使う。
C (1) 今となっては低レベルに分類される言語なのでしょうがないか
Java (123) 基本的には2かな。ラムダ構文がJava8から導入されたので、これからは3に移行していきそう
C# (123) ラムダの導入がJavaより早かったので、2と3が混在している感じ
PHP (123) ほとんど使ったことがないのでよくしらないけど、基本的には2なのかな
Python (2) 添字ループはそもそも文法にないし、ラムダは使いにくいので必然的に2
Ruby (23) 一応文法として2はあるけど使ってる人はほぼ皆無。3が圧倒的
JavaScript(13) ラムダが最初っからあるんだけど、コレクションライブラリが貧弱すぎていまだに1が優勢
おかげでunderscoreやらjQueryやらangularにまでforeach関数が用意されるというカオス
Scala (3) for式はあるがこれはmapを使うただの糖衣構文。よって3のみ
0834uy ◆Qawu9.2l1E
2015/11/06(金) 20:09:11.87ID:Y2REc2we0835uy ◆Qawu9.2l1E
2015/11/06(金) 20:12:59.87ID:Bw8X18sChttps://lodash.com/
0836デフォルトの名無しさん
2015/11/06(金) 20:17:37.45ID:Jbsw4Wxaあるのは知ってるし、俺も使わせてもらってる (underscoreの記述はしたし、分かってもらえてるとは思うけど)
今回は言語+ビルトインライブラリの話をした
0837デフォルトの名無しさん
2015/11/06(金) 21:08:34.74ID:iLvLfKdXはー、なるほど。
今デバッガでステップで見てたけど、今のOSは賢いな。素直にこれは勉強になったわ。
やっぱCしなきゃならんな。
ずっと割と特殊な言語してるからな。
0838デフォルトの名無しさん
2015/11/06(金) 21:09:42.32ID:iLvLfKdX言語じゃなくて処理系だけどあるよ。
0839uy ◆Qawu9.2l1E
2015/11/06(金) 21:14:05.86ID:ctWMnKjq0840デフォルトの名無しさん
2015/11/06(金) 21:58:03.15ID:bdwf2snB0841デフォルトの名無しさん
2015/11/06(金) 22:29:45.01ID:iLvLfKdXどんな意図?
0842uy ◆Qawu9.2l1E
2015/11/06(金) 23:29:26.68ID:P+wdThaZ. : : : : : : : : : : : : : : : :| て 誰
/:: . : : : : : : : : : : : : : : | め だ
/:/: : : : : : : : : : : : : . : : :l | よ
/.:/ : : : : :i: : : : : : : : : : : : : } は
/.:/ . : : : : .:i : : : : :i: : 、: : : :ノへ、 /
/ ,′. : : : : : .:i : : : : :i: :i: '.: : :!::i:l\\ /
/: .′. : i: : :i..::i : : : : :i:斗rヤ笊仄 ハ i>‐----<: ゚.
. /: : ! . : : : i: : :i 人:. : : .:i::::.\l:斗-=ミ、}i|: : : :ハ: : : : : : ゚.
/: : : i:. : : : :i: : ;ャ≦ \::八:人〃斧笊ハ 刈ハ: : : l- 、: : : :|
. /: : : : i:. : : : :iX:八_ \ \:.\ 、 マ) .::i }} }:.:.i.:!h ハ: :. : |
厶 -‐ i:.: : : :∧ .〃斧�_ \ 、_.:ノ 八ノリ.ソ }: :!: :l
/ ̄ ̄ ̄ ̄ ̄\: :∧{ マ .:i / }ノ.ノ : |∨
ね 好 .い ヽ: ヘ 弋.:ノ , r<: : :ハ|
| き き �Y゚:. /.:.:∧.:{ j
ぞ 勝 な Vi:!:. , ¨フ V.:( )ノ
手 り W八 ー / ∨}
言 現 L__ ` .. / 〉- 、
っ れ √ ¨¨ ¬ ´ /_三二ニ=‐-
て て ; __ハ /. : : : : : : : : : : :
ん / ノ.:r'ヘ /: : : : : : : : :斗ャ≦
じ / /: / / : : : : : : 。≦ニ〃/
ゃ / /: : :/ /: : : : : : /三=‐ {{/
0843デフォルトの名無しさん
2015/11/07(土) 10:58:02.89ID:RwXev/UR> ヒープが下から、スタックフレームが上から、同じメモリを食ってくんだから。
> ヒープが溢れると、スタックフレームも溢れてるし、
> スタックフレームが溢れるという事はヒープも溢れてる。
> 実際問題全く同じなのに。
この発言の説明しろよ
特に
> スタックフレームが溢れるという事はヒープも溢れてる。
0844デフォルトの名無しさん
2015/11/07(土) 11:57:45.08ID:ptDOELGYヒープ領域に用意したスタックとループで実装し直してもアウトオブメモリになる危険性は変わらないよ!
ループや再帰が出てくる前の、アルゴリズムの見直しをしようね!
0845デフォルトの名無しさん
2015/11/07(土) 15:07:28.74ID:JLeExy5dもう説明したでしょ。
>>844
そのとーり。
0846デフォルトの名無しさん
2015/11/07(土) 15:28:58.81ID:RwXev/UR> ヒープが下から、スタックフレームが上から、同じメモリを食ってくんだから。
> ヒープが溢れると、スタックフレームも溢れてるし、
> スタックフレームが溢れるという事はヒープも溢れてる。
> 実際問題全く同じなのに。
全然説明になって無いね
0847デフォルトの名無しさん
2015/11/07(土) 19:07:11.11ID:aPHPZ3+uInterLisp-Dはスタックフレームはヒープ上に取るから仮想記憶が尽きるまで。
ちなみに実行を止めてダンプを持ち運べば別のマシンで再開できた。
0848uy ◆Qawu9.2l1E
2015/11/07(土) 21:38:02.16ID:Rb6TxNfK0849デフォルトの名無しさん
2015/11/07(土) 22:12:39.02ID:k3SZd1ks再帰は関数の最後まで見ないと繰り返しの処理をやってるかわからないんだよ。
これを見て欲しい。
function testA() {
...(数百行)
testA();
}
一方ループは関数の先っちょあたりで、あこれは繰り返し処理をしてるな
っていうのが即座に判明する。プログラムの構造が人間の理解を助ける。
これを見て欲しい。
function testB() {
for (int i = 0; i < 1000; i++) {
...(数百行)
}
}
この事実を知ってもなおあなたは再帰を支持しますか?
0850デフォルトの名無しさん
2015/11/07(土) 22:27:57.81ID:k3SZd1ks処理が遅いしスタックオーバーフローするし、使いどころが
あまりないよね。
0851uy ◆Qawu9.2l1E
2015/11/07(土) 22:35:01.57ID:0QRugbs1Mumei_saiki_kakkoloopwara do |f|
処理
f.call
end
これが再帰て言ってもわからないよね。。。。。
0853デフォルトの名無しさん
2015/11/08(日) 04:56:54.05ID:36/ICdkK0854デフォルトの名無しさん
2015/11/08(日) 08:58:38.41ID:ruUsjfQ4>>106でそれのパクリ元は外出
0855uy ◆Qawu9.2l1E
2015/11/08(日) 09:37:12.54ID:w/pNyAon0856デフォルトの名無しさん
2015/11/08(日) 09:46:42.44ID:ruUsjfQ4無知を自慢しなくても良い
0857デフォルトの名無しさん
2015/11/08(日) 10:40:01.80ID:D4jx3nEwありえねえ。ループのたびに関数作るのかお前は。
関数ヘルだな。
0858デフォルトの名無しさん
2015/11/08(日) 11:43:39.05ID:zIxOYVPQ処理が長い場合、タスク分割のために関数・メソッドにしておくのはごく一般的な事。
プログラマとして仕事したいなら、働く前にリーダブルコードを読んでおくといいよ。
0859デフォルトの名無しさん
2015/11/08(日) 11:58:26.23ID:EqVtngVcあのな、そのレベルのものを、再起だとかループだとかいう時点でおかしいと気づけ。
例えば、
parseDoc(lpStr) {
:
みたいな関数で、while(...)で、strが尽きるまでループしている中で、
if(cmd=="eval") lpStr=parseDoc(lpStr);
みたいに使えば、あ、同じ構造を処理してるんだな、終わったらポインタが進むんだなって一目でわかるでしょ。
これを理解した上で、勝手スタックに今のポインタ値保存して、必要なら変数も保存して、終わったら戻す、みたいな処理のほうが良いなら、説明してほしいわ。
あと関数数百行はおかしいから。
80行〜120行でも長大関数。
0860デフォルトの名無しさん
2015/11/08(日) 13:05:36.05ID:D4jx3nEw本のタイトル知ってるだけのシッタカさんお疲れ様です。
0861デフォルトの名無しさん
2015/11/08(日) 13:07:41.95ID:D4jx3nEw何を言っとるんだチミは。
0862デフォルトの名無しさん
2015/11/08(日) 13:08:56.74ID:D4jx3nEwそれらを読み解けなければやっていけない。
0863デフォルトの名無しさん
2015/11/08(日) 13:31:25.99ID:YL2+Mlqr0864デフォルトの名無しさん
2015/11/08(日) 13:48:33.01ID:hJdCHUnW何に疑問持たれてるかわからん。
>>862
仕事でプログラムしてるけど、そんな関数書いたらQCレビューではねられるよ。
そんなレビューもない会社なら別だけどさ。
0865デフォルトの名無しさん
2015/11/08(日) 14:00:37.62ID:D4jx3nEw>>859は全面的に何を言いたいのかわからない内容だ。
小企業のジコマンレビュー受けて書きなおせば?w
0866デフォルトの名無しさん
2015/11/08(日) 14:02:48.23ID:YL2+Mlqr0867デフォルトの名無しさん
2015/11/08(日) 14:03:30.47ID:D4jx3nEw関数は1000行超えてからやっと新人卒業って感じかな。
ベテランになると万超えるよ。
0868デフォルトの名無しさん
2015/11/08(日) 14:04:39.12ID:D4jx3nEwなんのためのレビューだよw
レビューしなきゃ不安になるような人員雇ってる時点でお察しだわw
SIerか?じゃあしょうがないよね。
0869デフォルトの名無しさん
2015/11/08(日) 14:06:39.84ID:D4jx3nEw0870デフォルトの名無しさん
2015/11/08(日) 14:09:05.13ID:D4jx3nEwよしこれからドメイン駆動開発だ!とか言っちゃってんじゃないの?w
プログラム業界の中二病ですわwwww
0871デフォルトの名無しさん
2015/11/08(日) 14:11:08.30ID:YL2+Mlqrそこまで余裕ないの?
0872デフォルトの名無しさん
2015/11/08(日) 16:34:19.49ID:ezMQjLzR読まないけど。
0873デフォルトの名無しさん
2015/11/08(日) 17:13:32.26ID:ruUsjfQ4行数の制限はないけど、他の項目で引っかかってても不思議じゃない。それくらいアホ。
0874デフォルトの名無しさん
2015/11/08(日) 17:19:54.12ID:krAhSW9o社員教育してない会社のコードは凄い事になってる。
0875デフォルトの名無しさん
2015/11/08(日) 17:27:16.44ID:Ai/4n8j5再帰処理しているような極悪コードが見逃されてしまう。
0876デフォルトの名無しさん
2015/11/08(日) 17:39:39.08ID:ayKNhgcG0877デフォルトの名無しさん
2015/11/08(日) 18:00:06.71ID:ruUsjfQ40878デフォルトの名無しさん
2015/11/08(日) 18:43:05.21ID:Ai/4n8j5現実世界と回s利しまくり。
これが永遠ヒキニートの再帰厨の現実。
再帰アルゴリズムを見るだけですさまじい苦労なんだろう。
0879デフォルトの名無しさん
2015/11/08(日) 18:54:26.34ID:krAhSW9o0880デフォルトの名無しさん
2015/11/08(日) 18:57:00.93ID:ezMQjLzR0881デフォルトの名無しさん
2015/11/08(日) 19:03:15.46ID:ruUsjfQ4バカを使うためには難しい事を禁止して、バカの能力の範囲内で使う事が肝要。
0882デフォルトの名無しさん
2015/11/08(日) 19:53:59.36ID:krAhSW9o問題はバカ上司。効率が落ちるのは必至。ジョブが頓挫してもおかしくない
0883デフォルトの名無しさん
2015/11/08(日) 20:03:50.49ID:HEL0zLh3お前アホなのかな。
何なんだろう。コードが長くて一人前はあり得ないわ。
不安だからレビューするんじゃなくて、品質をより上げるためにレビューするんだけどなぁ。
俺は医療だけど。スタンプラリーが10箇所超えてる。
0884uy ◆Qawu9.2l1E
2015/11/08(日) 20:26:12.13ID:w/pNyAon質問です。
無名再帰がパクりってな に?
無 名再帰がパクりって なに?
無名 再帰がパクりっ てなに?
無名再 帰がパクり ってなに?
無名再帰 がパク りってなに?
無名再帰が パ クりってなに?
無名再帰がパ クりってなに?
無名再帰が パク りってなに?
無名再帰 がパクり ってなに?
無名再 帰がパクりっ てなに?
無名 再帰がパクりって なに?
無 名再帰がパクりってな に?
無名再帰がパクりってなに ?
0885uy ◆Qawu9.2l1E
2015/11/08(日) 21:52:16.34ID:hjGS9Lf9r'三三三三{ .ノ┌‐┐ ./≠::::::::::::::::::::::::::::::::::ミx、 ノ'´ | 繰 .| Y三
乂三三三ニ] ノ ツ {:::::::::::::::::::::::::::::::::::::::::::::`' 、__ | り | ノ'"´
 ̄⌒^フ圦 ,,'" ̄::::::::::::::::::::、:::::::::::::ヽ:::::::::::::< ∠. 返 | ,/
ミx、 `三≧=-、_/:::::::::::::::::::::::::::::::::::::ヽ::::::::::::∨:::::::::::::ヽし|. : .|
三L、 /::::::::::::::::::::::::::斗┼ヘ∧::::::::::::i::::::::::::::::: L.| 文 .|
三ヘ三彡⌒ー ∠._/:::::::::::::::i:::::::::∧| ,x'"芯ミ、::::::::|:::::::::≧=- \ / -=≦彡
.':::::::::::::-┼''"/ { _r} }}::::::::::::::::::::::/ ̄ \
, {:::{:::::∨〃芯 ‘¨” '"}:::/^!::::::::::| : .こ |
≧=-'´ Vヘ:::::::'.::...ヒ:ノ ノイ ,|:::::: /| : の |
ヽ:::ヘ:::::「 ` U _ノ:|::::::/ | : 感 |
` ヘ/ く_ 〕 .|ハ::∧/ .l !! .じ |
` .,_ / | .}' . \___./
丁 L...、 i
i .i|;iノ」 ´__ `ー|l!、 i|
rl | 川' ./ / r 'rー‐-、`i|:l! ヽ | ll
/| / ̄/ / └' ノ⌒`´ |x、 /
./∧ / ./ ノ 二二ユ ヽ、 ソ''
ノ {:l:l}/--/ ア 二二,フ {ハ ッ
,廴__>'" 〈{ 乂_ ノ ̄ ̄ l }
0886デフォルトの名無しさん
2015/11/08(日) 22:19:47.99ID:D4jx3nEw昔々、恐竜が生きていた時代に条件分岐や繰り返しと行った処理は
ぜんぶgoto文で行われてた。ダイクストラさんはそれがわかりにくいってことで
goto文は有害と思われると言って構造化プログラミングを提唱した。
今日のプログラム言語は条件分岐に用いるif文や繰り返しに用いるfor,whileといった
専用の構文を用意している。もはや構造化を意識する時代じゃないし、
JavaやRubyのようにオブジェクト指向の言語を使えば自動的にオブジェクト指向になる時代だ。
お前は時代遅れの原始人ってことを自覚するべきだと思われる。
0887デフォルトの名無しさん
2015/11/08(日) 22:20:40.52ID:D4jx3nEwuyさんごめんなさい。uyさんごめんなさい。uyさんごめんなさい。
0888デフォルトの名無しさん
2015/11/08(日) 22:43:10.55ID:D4jx3nEw構造化にしてもオブジェクト指向にしても、それらはプログラムを管理しやすくするための技術だ。
あくまでもプログラムを管理するという目的があってその目的を達成するための手段の一つ。
ところがろくに知識のない知ったかぶりっ子は往々にして手段と目的を取り違える。
関数を分割すること、オブジェクトを分けること、デザインパターンを使用すること
その作業そのものを目的にしてしまう。十分にわかりやすいプログラムであっても
関数が分かれていないからわかりにくいプログラムだと思い込んでしまう。
ご本を読んでわかった気になってる経験の浅いニワカ野郎が陥る落とし穴だ。
俗にいう意識高い系である。
0889デフォルトの名無しさん
2015/11/08(日) 23:57:20.92ID:QYMRsb+20890デフォルトの名無しさん
2015/11/09(月) 00:15:38.69ID:tkNS1IWMスレタイよく見ろ。なるかどうかじゃない、好きかどうかを言えよ!(ドン!!)
0891uy ◆Qawu9.2l1E
2015/11/09(月) 00:28:47.36ID:VILofMhT再帰 → スタックと引数を使うから↑の変数宣言いらない
↑全てのループと再帰は末尾最適化して書ける
→ 再帰厨の勝ち
0892デフォルトの名無しさん
2015/11/09(月) 00:50:25.68ID:tkNS1IWM再帰でやるにしても配列と序数の管理は必要でしょうに。
引数つまりローカル変数を書き換えていくっしょ。
public class Test {
public static void main(String[] args) {
int[] a = IntStream.range(0, 10).toArray();
rec_each(a, 0);
}
static void rec_each(int[] array, int index) {
if (array.length <= index) {
return;
} else {
System.out.println(array[index]);
rec_each(array, index + 1);
}
}
}
0893デフォルトの名無しさん
2015/11/09(月) 01:41:23.27ID:fyLz/sBu↓これのどこがわからないんだろう? >>106が読めないのか?
>>854
| >>851
| >>106でそれのパクリ元は外出
0894デフォルトの名無しさん
2015/11/09(月) 08:09:11.20ID:KQW6HPEX関数使った時点で自動宣言されてるよ
専用機でもない限り宣言されないスタックなんてない
結局、再帰もループも使う側の概念の問題で、
具体的な違いなど見つからない
0895uy ◆Qawu9.2l1E
2015/11/09(月) 09:00:44.47ID:iJi5V/lcインデックスのない再帰の例
# 最上位ノードのシンボルを得る
def top_symbol
return up.top_symbol if up
symbol
end
そして1関数の再帰の話というよりデータの管理方法の話だ
例えばクラスAのインスタンスが複数個必要な時、
ループ厨は配列で管理するけど、
再帰厨様はツリーで管理するから、その分の配列宣言が不要
>>893
は?
>>894
は?
0896デフォルトの名無しさん
2015/11/09(月) 09:34:59.77ID:VSFTuqKTアセンブラに毛の生えたような言語使ってるけど真剣に思う。
0897デフォルトの名無しさん
2015/11/09(月) 09:40:27.96ID:KQW6HPEX0898uy ◆Qawu9.2l1E
2015/11/09(月) 09:51:00.11ID:iJi5V/lc君のような知恵のチンパンに、この事実を伝えるのは難しいけれど
"コンパイラ"が宣言してる内部変数と
ソースコード上で"宣言している変数"は別物だよ
0899uy ◆Qawu9.2l1E
2015/11/09(月) 09:51:56.06ID:iJi5V/lc0900デフォルトの名無しさん
2015/11/09(月) 09:52:48.66ID:Yjqxj+LL使わないと高速化が厳しい。
適材適所。
0901デフォルトの名無しさん
2015/11/09(月) 10:03:11.90ID:ddVcBsOPコンパイラの知識が0なんだろうな
0902uy ◆Qawu9.2l1E
2015/11/09(月) 10:04:21.36ID:iJi5V/lcf e d c b a を up という変数でつなぎ合わせた場合
a.up # => b
a.up.up # => c
a.up.up.up # => d
a.up.up.up.up # => e
a.up.up.up.up.up # => f
a.up.up.up.up.up.up # => nil
こんな状態になるわけだけど
p func a # => f
で f を取得したいときに関数funcはどのように書きますか?
def func z
...
end
-----------------
ちなみに再帰だと
def func z
return func z.up if z.up
z
end
こうなりますけど
ループでかけんの?
0904デフォルトの名無しさん
2015/11/09(月) 10:08:48.44ID:fyLz/sBu>>>893
>は?
バカ自慢しなくて良いぞ。
0905デフォルトの名無しさん
2015/11/09(月) 10:13:10.33ID:ddVcBsOP哀れな奴だな
2chでコテハンつけて自己主張か
自殺したほうがいいんじゃない?
0906デフォルトの名無しさん
2015/11/09(月) 10:16:16.49ID:ddVcBsOPコテハンにしてなにしたいんだろうこの馬鹿は
0907uy ◆Qawu9.2l1E
2015/11/09(月) 10:16:21.37ID:iJi5V/lcまた勝ってしまったのか
0908デフォルトの名無しさん
2015/11/09(月) 10:17:20.17ID:ddVcBsOP自分の頭がおかしいということに早く気付いたほうが良い
レス数が900を超えています。1000を超えると表示できなくなるよ。