なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net (914レス)
なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1448704298/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
548: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 17:38:28.00 ID:7uWOp/tU つか、末尾再帰ってループそのまんまで再帰の利点ないし recHoge1(a,n,arg...){ dobefore()... if(a<n)recHoge1(a,n,arg...); } loopHoge1(a,n,arg...){ while(a<n){ dobefore()... } } 再帰は無意味、使う必要なし recHoge2(a,n,arg...){ dobefore()... recHoge2(a,n,arg...); doafter()... } loopHoge2(a,n,arg...){ while(a<n){ pushargstack(); dobefore()... popargstack(); doafter()... } } 再帰で有意味、この場合使える http://mevius.5ch.net/test/read.cgi/tech/1448704298/548
549: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 17:44:32.72 ID:7uWOp/tU pop,push逆だった loopHoge2(a,n,arg...){ while(a<n){ popargstack(); dobefore()... pushargstack(); doafter()... } } http://mevius.5ch.net/test/read.cgi/tech/1448704298/549
550: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 18:00:09.14 ID:7uWOp/tU pushargstack(); popargstack(); ユーザー定義のこれらはめんどくさいから 再帰関数使ってコンパイラ任せにするよ http://mevius.5ch.net/test/read.cgi/tech/1448704298/550
552: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 18:16:50.81 ID:7uWOp/tU recHoge1(term,arg...){ dobefore()... if(term)recHoge1(term,arg...); } loopHoge1(term,arg...){ while(term){ dobefore()... } } 再帰は無意味、使う必要なし recHoge2(term,arg...){ dobefore()... if(term)recHoge2(term,arg...); doafter()... } loopHoge2(term,arg...){ while(term){ popargstack(); dobefore()... if(term)continue; pushargstack(); doafter()... } } 再帰で有意味、この場合使える pushargstack(); popargstack(); ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ たったこれだけの内容 http://mevius.5ch.net/test/read.cgi/tech/1448704298/552
553: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 18:19:28.48 ID:7uWOp/tU >>551 >>552 以上のことの何があるか説明してみてよ http://mevius.5ch.net/test/read.cgi/tech/1448704298/553
554: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 18:42:48.29 ID:7uWOp/tU ttp://nas6.main.jp/Maze.cpp 再帰、ループ、等価迷路 http://mevius.5ch.net/test/read.cgi/tech/1448704298/554
555: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 18:55:15.40 ID:7uWOp/tU recHoge1(term,arg...){ dobefore()... if(term)recHoge1(term,arg...); } loopHoge1(term,arg...){ while(term){ dobefore()... } } 再帰は無意味、使う必要なし recHoge2(term,arg...){ dobefore()... if(term)recHoge2(term,arg...); doafter()... } loopHoge2(term,arg...){ while(term){ pushargstack(); dobefore()... if(term)continue; popargstack(); doafter()... } } 再帰で有意味、この場合使える pushargstack(); popargstack(); ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ たったこれだけの内容 、勘違い訂正 http://mevius.5ch.net/test/read.cgi/tech/1448704298/555
556: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 19:03:49.25 ID:7uWOp/tU >>554で、 ループ実装が好きなやつはいないと思うんだけどな http://mevius.5ch.net/test/read.cgi/tech/1448704298/556
558: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 21:51:32.16 ID:7uWOp/tU 「{C++規則をかなり抑えてCライク}で書かれたソースコード」 のクロスランゲッジなんて、ほぼ、ライブラリの関数名を書き換えるだけだろ http://mevius.5ch.net/test/read.cgi/tech/1448704298/558
559: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 21:54:46.92 ID:7uWOp/tU あ、あと制御構文もちゃっちゃっと書き換えれば出来上がり http://mevius.5ch.net/test/read.cgi/tech/1448704298/559
566: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 23:00:49.51 ID:7uWOp/tU ruby知らんがこんな感じだろ def recHoge2(term,arg...) dobefore(arg...) if term recHoge2(term,arg...) end doafter(arg...) end end def loopHoge2(term,arg...) while term pushargstack(arg...) dobefore(arg...) if term next end popargstack(arg...) doafter(arg...) end end http://mevius.5ch.net/test/read.cgi/tech/1448704298/566
567: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 23:01:55.35 ID:7uWOp/tU class stack def initialize @ret = -1 @crnt = 0 @MAX_STACK = 32768 @stk[MAX_STACK] end def pop_stk() if -1 < crnt ret = stk[crnt] crnt = crnt - 1 end end def push_stk(v) if crnt < MAX_STACK - 1 crnt = crnt + 1 stk[crnt] = v end end end stk = stack def pushargstack(arg1...argn) stk.push_stk(arg1) ... stk.push_stk(argn) end def popargstack(arg1...argn) argn = stk.pop_stk() ... arg1 = stk.pop_stk() end http://mevius.5ch.net/test/read.cgi/tech/1448704298/567
568: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 23:07:46.09 ID:7uWOp/tU def recHoge2(term,arg...) dobefore(arg...) if term recHoge2(term,arg...) end doafter(arg...) end で、こんだけで済むのに、 ループにしたいからって スタックのユーザー定義なんて馬鹿だろう http://mevius.5ch.net/test/read.cgi/tech/1448704298/568
569: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 23:22:49.68 ID:7uWOp/tU 再帰をループにしたかったら こういうのをいちいち作らなきゃだめだよ class stack def initialize @crnt = 0 @MAX_STACK = 32768 @stk[MAX_STACK] end def pop_stk() if -1 < crnt ret = stk[crnt] crnt = crnt - 1 return ret end end def push_stk(v) if crnt < MAX_STACK - 1 crnt = crnt + 1 stk[crnt] = v end end end http://mevius.5ch.net/test/read.cgi/tech/1448704298/569
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.162s*