なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net (914レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
548: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 17:38:28.00 ID:7uWOp/tU(1/14) AAS
つか、末尾再帰ってループそのまんまで再帰の利点ないし
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()...
}
}
再帰で有意味、この場合使える
549: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 17:44:32.72 ID:7uWOp/tU(2/14) AAS
pop,push逆だった
loopHoge2(a,n,arg...){
while(a<n){
popargstack();
dobefore()...
pushargstack();
doafter()...
}
}
550: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 18:00:09.14 ID:7uWOp/tU(3/14) AAS
pushargstack();
popargstack();
ユーザー定義のこれらはめんどくさいから
再帰関数使ってコンパイラ任せにするよ
552(1): NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 18:16:50.81 ID:7uWOp/tU(4/14) AAS
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();
ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ
たったこれだけの内容
553: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 18:19:28.48 ID:7uWOp/tU(5/14) AAS
>>551
>>552
以上のことの何があるか説明してみてよ
554(1): NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 18:42:48.29 ID:7uWOp/tU(6/14) AAS
http://nas6.main.jp/Maze.cpp
再帰、ループ、等価迷路
555: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 18:55:15.40 ID:7uWOp/tU(7/14) AAS
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();
ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ
たったこれだけの内容 、勘違い訂正
556: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 19:03:49.25 ID:7uWOp/tU(8/14) AAS
>>554で、
ループ実装が好きなやつはいないと思うんだけどな
558: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 21:51:32.16 ID:7uWOp/tU(9/14) AAS
「{C++規則をかなり抑えてCライク}で書かれたソースコード」
のクロスランゲッジなんて、ほぼ、ライブラリの関数名を書き換えるだけだろ
559(1): NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 21:54:46.92 ID:7uWOp/tU(10/14) AAS
あ、あと制御構文もちゃっちゃっと書き換えれば出来上がり
566: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 23:00:49.51 ID:7uWOp/tU(11/14) AAS
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
567: NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 23:01:55.35 ID:7uWOp/tU(12/14) AAS
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
568(1): NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 23:07:46.09 ID:7uWOp/tU(13/14) AAS
def recHoge2(term,arg...)
dobefore(arg...)
if term
recHoge2(term,arg...)
end
doafter(arg...)
end
で、こんだけで済むのに、
ループにしたいからって
スタックのユーザー定義なんて馬鹿だろう
569(1): NAS6 ◆n3AmnVhjwc [] 2016/01/04(月) 23:22:49.68 ID:7uWOp/tU(14/14) AAS
再帰をループにしたかったら
こういうのをいちいち作らなきゃだめだよ
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
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.032s