探検
なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
1デフォルトの名無しさん
2015/11/28(土) 18:51:38.86ID:Rc2MJzM/ なあ、再帰関数好きな人いる?
499デフォルトの名無しさん
2015/12/30(水) 18:35:57.34ID:WCUOMmTt テロリストは逮捕されろよ。
500デフォルトの名無しさん
2015/12/30(水) 18:45:12.16ID:o3pJDHAa 再帰が実用的でなく
ループの方が有利だから
変換しないといけない。
ループの方が有利だから
変換しないといけない。
501デフォルトの名無しさん
2015/12/30(水) 18:47:59.10ID:hgJXqSbV >>498
それは文脈による,よく逆電圧っていうが実は順電圧だったりすることはあるし
それは文脈による,よく逆電圧っていうが実は順電圧だったりすることはあるし
502デフォルトの名無しさん
2015/12/30(水) 19:10:36.15ID:Y9esFwyM503デフォルトの名無しさん
2015/12/30(水) 19:20:03.93ID:pyiqU+eC >>502
この分からず屋!!
この分からず屋!!
504デフォルトの名無しさん
2015/12/30(水) 21:43:44.03ID:c5JPL3VW 分かるように説明できないんじゃ周りは皆分からず屋に見えてしまうね
505デフォルトの名無しさん
2015/12/30(水) 21:56:06.02ID:WCUOMmTt 我々市民はテロリストを納得させるような言葉を持たない。
従って、テロリスト自ら変わらない限り、テロリストは永遠に市民の敵である。
従って、テロリスト自ら変わらない限り、テロリストは永遠に市民の敵である。
506デフォルトの名無しさん
2015/12/31(木) 01:15:35.98ID:+JFM0ZYm >>496
キミの方だとおもうよ。ぷぷぷ。
「末尾再帰は... コンパイラが再帰をループに変換してくれる機能」
> 末尾再帰は「再帰を末尾再帰で書けば速くなる」というものではなくて
> (単純な)ループを何らかの理由で再帰の形にしないといけない時、
> 末尾再帰の条件を満たすように、ループを再帰に変換すると
> コンパイラが再帰をループに逆変換してくれる機能
キミの方だとおもうよ。ぷぷぷ。
「末尾再帰は... コンパイラが再帰をループに変換してくれる機能」
> 末尾再帰は「再帰を末尾再帰で書けば速くなる」というものではなくて
> (単純な)ループを何らかの理由で再帰の形にしないといけない時、
> 末尾再帰の条件を満たすように、ループを再帰に変換すると
> コンパイラが再帰をループに逆変換してくれる機能
507デフォルトの名無しさん
2015/12/31(木) 01:18:23.37ID:+JFM0ZYm >>496
それは、「末尾再帰最適化」というコンパイラの機能だね。
それは、「末尾再帰最適化」というコンパイラの機能だね。
508デフォルトの名無しさん
2015/12/31(木) 01:21:18.07ID:+JFM0ZYm 「ループを再帰に変換すると、コンパイラが再帰をループに逆変換してくれる」
頭沸いてるだろ。ぷぷぷ。最初からループで書いとけよ。
頭沸いてるだろ。ぷぷぷ。最初からループで書いとけよ。
509デフォルトの名無しさん
2015/12/31(木) 02:10:00.81ID:RPyreEna そんなんじゃ小説なんか読めないだろう。
読解力なさすぎだよ。
読解力なさすぎだよ。
510デフォルトの名無しさん
2015/12/31(木) 02:17:21.09ID:+JFM0ZYm 読解力が足りないとか言いだしたぞ。このバカ。
> ループを再帰に変換すると、コンパイラが再帰をループに逆変換してくれる機能
> ループを再帰に変換すると、コンパイラが再帰をループに逆変換してくれる機能
511デフォルトの名無しさん
2015/12/31(木) 02:26:21.16ID:Rb2meO2K512デフォルトの名無しさん
2015/12/31(木) 02:32:06.38ID:+JFM0ZYm おー、すげー。天才現る。
これで、スタックオーバーフロー完全克服だ。
これで、スタックオーバーフロー完全克服だ。
513デフォルトの名無しさん
2015/12/31(木) 02:52:07.07ID:cXVC2Dha 末尾再帰に変換できるとは言ったが,スタックオーバーフローを回避できるとは言ってない(キリッ
514デフォルトの名無しさん
2015/12/31(木) 03:04:20.45ID:+JFM0ZYm クイックソート10000倍高速化とか再帰→末尾再帰の自動変換とか、このスレには天才が多いな。
515デフォルトの名無しさん
2015/12/31(木) 07:33:29.73ID:Rb2meO2K CPS変換も知らんのか…
516デフォルトの名無しさん
2015/12/31(木) 09:52:41.50ID:tmojp+ig >>510
俺は第三者だ。
俺は書き込んだ奴の言いたいことが容易に把握できている。
それがキミにはできないという。
再帰についてのスレで再帰について書かれているのだから、バックボーンの違いではないだろう。
知識ではなく読解力の問題だ。
こんなもん小学生でも意味をくみ取るぞ。
俺は第三者だ。
俺は書き込んだ奴の言いたいことが容易に把握できている。
それがキミにはできないという。
再帰についてのスレで再帰について書かれているのだから、バックボーンの違いではないだろう。
知識ではなく読解力の問題だ。
こんなもん小学生でも意味をくみ取るぞ。
517デフォルトの名無しさん
2016/01/01(金) 00:50:07.33ID:PlqvFYu0518デフォルトの名無しさん
2016/01/01(金) 00:56:33.12ID:XLbYQ9mF そんなんじゃ小説も読めないだろう。
末尾再帰とは、本来ループで書くべきものを再帰で書いた時にコンパイラが
自動でループに直す機能・・・という主張なのだろう。
末尾再帰とは、本来ループで書くべきものを再帰で書いた時にコンパイラが
自動でループに直す機能・・・という主張なのだろう。
519デフォルトの名無しさん
2016/01/01(金) 00:57:41.99ID:PlqvFYu0 >>515
よくいるんだわ。より難解な前提が必要なのに、出来るよって言い出す奴。
よくいるんだわ。より難解な前提が必要なのに、出来るよって言い出す奴。
520デフォルトの名無しさん
2016/01/01(金) 00:57:43.20ID:XLbYQ9mF 逆変換という言葉は、そういった前提があって出てくる言葉だと思うぞ。
521デフォルトの名無しさん
2016/01/01(金) 02:37:45.56ID:mIgzxpKK コンパイラが最適化してくれるならコンパイラにやらせるのが普通の話だよね
522デフォルトの名無しさん
2016/01/01(金) 08:22:45.99ID:xWjlSole >>521
ループの方が最適化効きやすいしな。
ループの方が最適化効きやすいしな。
523デフォルトの名無しさん
2016/01/01(金) 08:28:26.90ID:PlqvFYu0 >>520
末尾再帰の説明に「逆変換」を使うってどういう前提だよ www
末尾再帰の説明に「逆変換」を使うってどういう前提だよ www
524デフォルトの名無しさん
2016/01/01(金) 10:18:04.79ID:TPZeTHW+ >>523
本来ループであるべきものをプログラマが再帰に変換しているので、
コンパイラがループに逆変換するという主張なのだろう。
お前、本当にこの程度の文章が読めないの?
そんなんじゃ小説どころか論文も読めないだろう。
俺は元の文すら読んでいなく、引用されてるのを見てそこまで理解できてるぞ。
もう一度聞くけど、お前本当にこの程度の文が読めないの?
本来ループであるべきものをプログラマが再帰に変換しているので、
コンパイラがループに逆変換するという主張なのだろう。
お前、本当にこの程度の文章が読めないの?
そんなんじゃ小説どころか論文も読めないだろう。
俺は元の文すら読んでいなく、引用されてるのを見てそこまで理解できてるぞ。
もう一度聞くけど、お前本当にこの程度の文が読めないの?
525デフォルトの名無しさん
2016/01/01(金) 11:36:06.33ID:wTuRpENh > インバータ(Inverter)とは、
> 直流電力から交流電力を電気的に生成する(逆変換する)電源回路、
> またはその回路を持つ電力変換装置のことである。
> 逆変換回路(ぎゃくへんかんかいろ)、逆変換装置(ぎゃくへんかんそうち)などとも呼ばれる。
逆変換w
> 直流電力から交流電力を電気的に生成する(逆変換する)電源回路、
> またはその回路を持つ電力変換装置のことである。
> 逆変換回路(ぎゃくへんかんかいろ)、逆変換装置(ぎゃくへんかんそうち)などとも呼ばれる。
逆変換w
526デフォルトの名無しさん
2016/01/01(金) 12:12:39.23ID:D046Nv8F528デフォルトの名無しさん
2016/01/01(金) 15:48:40.55ID:PlqvFYu0529デフォルトの名無しさん
2016/01/01(金) 16:18:10.88ID:TPZeTHW+530uy ◆Qawu9.2l1E
2016/01/01(金) 19:46:32.52ID:FqzQpFZg531デフォルトの名無しさん
2016/01/01(金) 19:53:29.38ID:BqDq7bML >>530
そりゃrubyだからさ
そりゃrubyだからさ
532デフォルトの名無しさん
2016/01/01(金) 20:37:19.16ID:KnWw4/o3 今年もrubyのオワコン芸w
533uy ◆Qawu9.2l1E
2016/01/02(土) 03:28:12.35ID:cdXNgg3P >>531-532
本当に頭悪いカスだな
rubyに限定せず実装出来ると思うけど技量的に理解すら無理な感じ?
再帰とループの変換や末尾再帰の話題には触れてもここはTCOという単語が今まで一回も出てこないという事実
「知ってる側」からすると嘘をついてるのがすぐにわかってしまう
知ったかぶりのクズ
本当に頭悪いカスだな
rubyに限定せず実装出来ると思うけど技量的に理解すら無理な感じ?
再帰とループの変換や末尾再帰の話題には触れてもここはTCOという単語が今まで一回も出てこないという事実
「知ってる側」からすると嘘をついてるのがすぐにわかってしまう
知ったかぶりのクズ
535デフォルトの名無しさん
2016/01/02(土) 09:53:52.00ID:QH+c5K8j536デフォルトの名無しさん
2016/01/02(土) 13:32:29.04ID:3O/U03ws むしろ自分でやんないと末尾呼び最適化が利かない処理系って(ry
537デフォルトの名無しさん
2016/01/02(土) 15:04:15.58ID:QH+c5K8j なんだか遅れてるんだよねruby屋さんって
538デフォルトの名無しさん
2016/01/02(土) 15:39:39.87ID:TZBdz3NA rubyだからね。仕方ないね。
539デフォルトの名無しさん
2016/01/03(日) 22:30:43.03ID:F57MRPO3 >>533
何度も出てるし「末尾再帰」といった時点でジャンプへの変換という意味を持っていってるんだよ。
最適化が無ければ「末尾」と特別な扱いをする意味が無い。
runyって最近言い出したのか。30年遅れてるな。
何度も出てるし「末尾再帰」といった時点でジャンプへの変換という意味を持っていってるんだよ。
最適化が無ければ「末尾」と特別な扱いをする意味が無い。
runyって最近言い出したのか。30年遅れてるな。
540uy ◆Qawu9.2l1E
2016/01/04(月) 03:42:45.74ID:XM/1Dr6r 理解度が低すぎる
このアルゴリズムはこのスレでは初出だと認識してるけど
読めなくてわけわかんない状態か
さっさと死ねゴミ
このアルゴリズムはこのスレでは初出だと認識してるけど
読めなくてわけわかんない状態か
さっさと死ねゴミ
541uy ◆Qawu9.2l1E
2016/01/04(月) 03:51:45.48ID:wtRTZBq6 妥協点でPythonだからね
それ以下の言語でアルゴリズム語ってるスレ見ると
そこで話してる内容とか読む前に
まずはスレ民を学習させる事から初めて
レベルを上げてやらないと話にならない
それ以下の言語でアルゴリズム語ってるスレ見ると
そこで話してる内容とか読む前に
まずはスレ民を学習させる事から初めて
レベルを上げてやらないと話にならない
542デフォルトの名無しさん
2016/01/04(月) 04:13:44.75ID:u97FRQbx543デフォルトの名無しさん
2016/01/04(月) 04:55:36.62ID:WY8liDeA 再帰好きの人をサイキッカーと呼びたい
544デフォルトの名無しさん
2016/01/04(月) 10:03:14.86ID:hsfrcHKj いいなそれ
545デフォルトの名無しさん
2016/01/04(月) 12:27:00.00ID:U406TFbL 再帰好きの人のを中二コーダーと呼びたい
547デフォルトの名無しさん
2016/01/04(月) 16:24:41.19ID:u97FRQbx548NAS6 ◆n3AmnVhjwc
2016/01/04(月) 17:38:28.00ID: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()...
}
}
再帰で有意味、この場合使える
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()...
}
}
再帰で有意味、この場合使える
549NAS6 ◆n3AmnVhjwc
2016/01/04(月) 17:44:32.72ID:7uWOp/tU pop,push逆だった
loopHoge2(a,n,arg...){
while(a<n){
popargstack();
dobefore()...
pushargstack();
doafter()...
}
}
loopHoge2(a,n,arg...){
while(a<n){
popargstack();
dobefore()...
pushargstack();
doafter()...
}
}
550NAS6 ◆n3AmnVhjwc
2016/01/04(月) 18:00:09.14ID:7uWOp/tU pushargstack();
popargstack();
ユーザー定義のこれらはめんどくさいから
再帰関数使ってコンパイラ任せにするよ
popargstack();
ユーザー定義のこれらはめんどくさいから
再帰関数使ってコンパイラ任せにするよ
551uy ◆Qawu9.2l1E
2016/01/04(月) 18:13:29.66ID:zTvWipKl またゴミカス初心者が来たけど
また1から説明して教育しなきゃいけないの?
また1から説明して教育しなきゃいけないの?
552NAS6 ◆n3AmnVhjwc
2016/01/04(月) 18:16:50.81ID: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();
ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ
たったこれだけの内容
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();
ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ
たったこれだけの内容
554NAS6 ◆n3AmnVhjwc
2016/01/04(月) 18:42:48.29ID:7uWOp/tU ttp://nas6.main.jp/Maze.cpp
再帰、ループ、等価迷路
再帰、ループ、等価迷路
555NAS6 ◆n3AmnVhjwc
2016/01/04(月) 18:55:15.40ID: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();
ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ
たったこれだけの内容 、勘違い訂正
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();
ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ
たったこれだけの内容 、勘違い訂正
556NAS6 ◆n3AmnVhjwc
2016/01/04(月) 19:03:49.25ID:7uWOp/tU >>554で、
ループ実装が好きなやつはいないと思うんだけどな
ループ実装が好きなやつはいないと思うんだけどな
557uy ◆Qawu9.2l1E
2016/01/04(月) 21:13:17.67ID:KNqXLa56 RubyかPythonで書き直して
C++とかいうゴミいらねーから
C++とかいうゴミいらねーから
558NAS6 ◆n3AmnVhjwc
2016/01/04(月) 21:51:32.16ID:7uWOp/tU 「{C++規則をかなり抑えてCライク}で書かれたソースコード」
のクロスランゲッジなんて、ほぼ、ライブラリの関数名を書き換えるだけだろ
のクロスランゲッジなんて、ほぼ、ライブラリの関数名を書き換えるだけだろ
559NAS6 ◆n3AmnVhjwc
2016/01/04(月) 21:54:46.92ID:7uWOp/tU あ、あと制御構文もちゃっちゃっと書き換えれば出来上がり
560uy ◆Qawu9.2l1E
2016/01/04(月) 22:07:47.26ID:mZvmD2Em それをなぜ最初から簡潔な言語で書かないで
わざわざ冗長したC++・C言語といった言語でドヤァとソースコード貼りつけてくるのか、理解しがたいんだけど
カスレベルの初心者である事を数レスに渡る自己紹介でもしにきたのかね?
アルゴリズムの抽象化でC++とか使う奴はその時点で初心者だって一瞬で分かるって言ってるのに
自分が知恵遅れだと分かってないままの奴が続々現れるからこういう場所は話題がループする
わざわざ冗長したC++・C言語といった言語でドヤァとソースコード貼りつけてくるのか、理解しがたいんだけど
カスレベルの初心者である事を数レスに渡る自己紹介でもしにきたのかね?
アルゴリズムの抽象化でC++とか使う奴はその時点で初心者だって一瞬で分かるって言ってるのに
自分が知恵遅れだと分かってないままの奴が続々現れるからこういう場所は話題がループする
562デフォルトの名無しさん
2016/01/04(月) 22:23:59.40ID:JpzJLk3f 熱烈なC++アンチって速度要求される場面に出会ったことがないんだろな
もしくはフォートラン信者なんだろな
もしくはフォートラン信者なんだろな
563デフォルトの名無しさん
2016/01/04(月) 22:31:14.13ID:OFaVtQHO オッパイソンはベーシックみたいなもんで非プログラマが使うのに適してるけど、
プログラマが使うには色々しょぼすぎ。
ペイントショッププロのマクロにオッパイソンが採用されたときは、来るかと思ったけど、
それを機に没落していった。
イヌックスの呪いは有名だけど、オッパイソンの呪いもあるのかもしれん。
プログラマが使うには色々しょぼすぎ。
ペイントショッププロのマクロにオッパイソンが採用されたときは、来るかと思ったけど、
それを機に没落していった。
イヌックスの呪いは有名だけど、オッパイソンの呪いもあるのかもしれん。
564デフォルトの名無しさん
2016/01/04(月) 22:35:24.75ID:OFaVtQHO しかし、エクセルのマクロ使いはザラにいるのに、他のアプリはマクロ使いが
ほとんどいないんだよな。
イーマックソとか言うウンコは置いといて。
CADなんかマクロの使いであると思うのだが。
Autocadなんかウンコ使いが泣いて喜ぶLisp搭載してるのにな。
なんでだ。
ほとんどいないんだよな。
イーマックソとか言うウンコは置いといて。
CADなんかマクロの使いであると思うのだが。
Autocadなんかウンコ使いが泣いて喜ぶLisp搭載してるのにな。
なんでだ。
565デフォルトの名無しさん
2016/01/04(月) 22:55:58.31ID:8iRyCi7U とりあえずuyがほんとになにもわかってないことだけわかった
566NAS6 ◆n3AmnVhjwc
2016/01/04(月) 23:00:49.51ID: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
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
567NAS6 ◆n3AmnVhjwc
2016/01/04(月) 23:01:55.35ID: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
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
568NAS6 ◆n3AmnVhjwc
2016/01/04(月) 23:07:46.09ID:7uWOp/tU def recHoge2(term,arg...)
dobefore(arg...)
if term
recHoge2(term,arg...)
end
doafter(arg...)
end
で、こんだけで済むのに、
ループにしたいからって
スタックのユーザー定義なんて馬鹿だろう
dobefore(arg...)
if term
recHoge2(term,arg...)
end
doafter(arg...)
end
で、こんだけで済むのに、
ループにしたいからって
スタックのユーザー定義なんて馬鹿だろう
569NAS6 ◆n3AmnVhjwc
2016/01/04(月) 23:22:49.68ID: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
こういうのをいちいち作らなきゃだめだよ
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
570uy ◆Qawu9.2l1E
2016/01/05(火) 02:57:13.31ID:/kPL7pQm プログラミング半年目くらいだろうかコイツは
多く見積もって1年半
それ以上なら今すぐPC捨てたほうが良いレベル
多く見積もって1年半
それ以上なら今すぐPC捨てたほうが良いレベル
571デフォルトの名無しさん
2016/01/05(火) 02:58:35.02ID:3cj4CitF572デフォルトの名無しさん
2016/01/05(火) 02:59:25.81ID:CnA8UQLB死ねカス
573NAS6 ◆n3AmnVhjwc
2016/01/05(火) 06:30:43.49ID:FnNfbNzM Array.push()、Array.pop()があるんね
>>568で済む内容を、ループで書きたかったら↓しなければならない
def loopHoge2(term,arg...)
while term
pushargstack(arg...)
dobefore(arg...)
if term
next
end
popargstack(arg...)
doafter(arg...)
end
end
stk = Array.new()
def pushargstack(arg1...argn)
stk.push(arg1)
...
stk.push(argn)
end
def popargstack(arg1...argn)
argn = stk.pop()
...
arg1 = stk.pop()
end
>>568で済む内容を、ループで書きたかったら↓しなければならない
def loopHoge2(term,arg...)
while term
pushargstack(arg...)
dobefore(arg...)
if term
next
end
popargstack(arg...)
doafter(arg...)
end
end
stk = Array.new()
def pushargstack(arg1...argn)
stk.push(arg1)
...
stk.push(argn)
end
def popargstack(arg1...argn)
argn = stk.pop()
...
arg1 = stk.pop()
end
574NAS6 ◆n3AmnVhjwc
2016/01/05(火) 06:44:29.17ID:FnNfbNzM def recHoge2(term,arg1...argn)
dobefore(arg1...argn)
if term
recHoge2(term,arg1...argn)
end
doafter(arg1...argn)
end
↑は、こう↓書き換えられる
def loopHoge2(term,arg1...argn)
while term
pushargstack(arg1...argn)
dobefore(arg1...argn)
if term
next
end
popargstack(arg1...argn)
doafter(arg1...argn)
end
end
stk = Array.new()
def pushargstack(arg1...argn)
stk.push(arg1)
...
stk.push(argn)
end
def popargstack(arg1...argn)
argn = stk.pop()
...
arg1 = stk.pop()
end
dobefore(arg1...argn)
if term
recHoge2(term,arg1...argn)
end
doafter(arg1...argn)
end
↑は、こう↓書き換えられる
def loopHoge2(term,arg1...argn)
while term
pushargstack(arg1...argn)
dobefore(arg1...argn)
if term
next
end
popargstack(arg1...argn)
doafter(arg1...argn)
end
end
stk = Array.new()
def pushargstack(arg1...argn)
stk.push(arg1)
...
stk.push(argn)
end
def popargstack(arg1...argn)
argn = stk.pop()
...
arg1 = stk.pop()
end
575NAS6 ◆n3AmnVhjwc
2016/01/05(火) 07:30:28.12ID:FnNfbNzM #同色上書き塗りつぶし
def refill(dest,src,x,y,color,minx,miny,maxx,maxy)
if (x < minx) || (maxx < x) ||(y < miny) || (maxy < y)
return
end
dest[y][x] = color
#上
if (src[y-1][x] == color) && (dest[y-1][x] != color)
refill(dest,src,x,y-1,color,minx,miny,maxx,maxy)
end
#左
if (src[y][x-1] == color) && (dest[y][x-1] != color)
refill(dest,src,x-1,y,color,minx,miny,maxx,maxy)
end
#下
if (src[y+1][x] == color) && (dest[y+1][x] != color)
refill(dest,src,x,y+1,color,minx,miny,maxx,maxy)
end
#右
if (src[y][x+1] == color) && (dest[y][x+1] != color)
refill(dest,src,x+1,y,color,minx,miny,maxx,maxy)
end
end
↑のループ等価が↓
def refill(dest,src,x,y,color,minx,miny,maxx,maxy)
if (x < minx) || (maxx < x) ||(y < miny) || (maxy < y)
return
end
dest[y][x] = color
#上
if (src[y-1][x] == color) && (dest[y-1][x] != color)
refill(dest,src,x,y-1,color,minx,miny,maxx,maxy)
end
#左
if (src[y][x-1] == color) && (dest[y][x-1] != color)
refill(dest,src,x-1,y,color,minx,miny,maxx,maxy)
end
#下
if (src[y+1][x] == color) && (dest[y+1][x] != color)
refill(dest,src,x,y+1,color,minx,miny,maxx,maxy)
end
#右
if (src[y][x+1] == color) && (dest[y][x+1] != color)
refill(dest,src,x+1,y,color,minx,miny,maxx,maxy)
end
end
↑のループ等価が↓
576NAS6 ◆n3AmnVhjwc
2016/01/05(火) 07:31:25.96ID:FnNfbNzM stk =Array.new()
#同色上書き塗りつぶし
def loop_refill(dest,src,x,y,color,minx,miny,maxx,maxy)
term = 0
while !((x < minx) || (maxx < x) ||(y < miny) || (maxy < y))
dest[y][x] = color
#上
if (term < 1) && (src[y-1][x] == color) && (dest[y-1][x] != color)
term = 0
stk.push(x)
stk.push(y)
stk.push(term)
y = y - 1
term = 0
next
end
#左
if (term < 2) && (src[y][x-1] == color) && (dest[y][x-1] != color)
term = 1
stk.push(x)
stk.push(y)
stk.push(term)
x = x - 1
term = 0
next
end
#同色上書き塗りつぶし
def loop_refill(dest,src,x,y,color,minx,miny,maxx,maxy)
term = 0
while !((x < minx) || (maxx < x) ||(y < miny) || (maxy < y))
dest[y][x] = color
#上
if (term < 1) && (src[y-1][x] == color) && (dest[y-1][x] != color)
term = 0
stk.push(x)
stk.push(y)
stk.push(term)
y = y - 1
term = 0
next
end
#左
if (term < 2) && (src[y][x-1] == color) && (dest[y][x-1] != color)
term = 1
stk.push(x)
stk.push(y)
stk.push(term)
x = x - 1
term = 0
next
end
577NAS6 ◆n3AmnVhjwc
2016/01/05(火) 07:31:53.09ID:FnNfbNzM #下
if (term < 3) && (src[y+1][x] == color) && (dest[y+1][x] != color)
term = 2
stk.push(x)
stk.push(y)
stk.push(term)
y = y + 1
term = 0
next
end
#右
if (term < 4) && (src[y][x+1] == color) && (dest[y][x+1] != color)
term = 3
stk.push(x)
stk.push(y)
stk.push(term)
x = x + 1
term = 0
next
end
term = stk.pop()
y = stk.pop()
x = stk.pop()
end
end
if (term < 3) && (src[y+1][x] == color) && (dest[y+1][x] != color)
term = 2
stk.push(x)
stk.push(y)
stk.push(term)
y = y + 1
term = 0
next
end
#右
if (term < 4) && (src[y][x+1] == color) && (dest[y][x+1] != color)
term = 3
stk.push(x)
stk.push(y)
stk.push(term)
x = x + 1
term = 0
next
end
term = stk.pop()
y = stk.pop()
x = stk.pop()
end
end
578NAS6 ◆n3AmnVhjwc
2016/01/05(火) 07:34:06.45ID:FnNfbNzM 再帰関数を無理矢理ループで書くことが
正解だなんてとても思えないんだけど・・・
正解だなんてとても思えないんだけど・・・
579NAS6 ◆n3AmnVhjwc
2016/01/05(火) 07:57:54.39ID:FnNfbNzM580NAS6 ◆n3AmnVhjwc
2016/01/05(火) 08:01:46.66ID:FnNfbNzM destはコピー先だからそういう条件でクリア済みってことで
581NAS6 ◆n3AmnVhjwc
2016/01/05(火) 08:14:57.62ID:FnNfbNzM 2色必要だった・・・
srcのx,yからcolor2の連続部分をdestにcolor1で塗りつぶし
#同色上書き塗りつぶし
def refill(dest,src,x,y,color1,color2,minx,miny,maxx,maxy)
if (x < minx) || (maxx < x) ||(y < miny) || (maxy < y)
return
end
dest[y][x] = color1
#上
if (src[y-1][x] == color2) && (dest[y-1][x] != color1)
refill(dest,src,x,y-1,color1,color2,minx,miny,maxx,maxy)
end
#左
if (src[y][x-1] == color2) && (dest[y][x-1] != color1)
refill(dest,src,x-1,y,color1,color2,minx,miny,maxx,maxy)
end
#下
if (src[y+1][x] == color2) && (dest[y+1][x] != color1)
refill(dest,src,x,y+1,color1,color2,minx,miny,maxx,maxy)
end
#右
if (src[y][x+1] == color2) && (dest[y][x+1] != color1)
refill(dest,src,x+1,y,color1,color2,minx,miny,maxx,maxy)
end
end
srcのx,yからcolor2の連続部分をdestにcolor1で塗りつぶし
#同色上書き塗りつぶし
def refill(dest,src,x,y,color1,color2,minx,miny,maxx,maxy)
if (x < minx) || (maxx < x) ||(y < miny) || (maxy < y)
return
end
dest[y][x] = color1
#上
if (src[y-1][x] == color2) && (dest[y-1][x] != color1)
refill(dest,src,x,y-1,color1,color2,minx,miny,maxx,maxy)
end
#左
if (src[y][x-1] == color2) && (dest[y][x-1] != color1)
refill(dest,src,x-1,y,color1,color2,minx,miny,maxx,maxy)
end
#下
if (src[y+1][x] == color2) && (dest[y+1][x] != color1)
refill(dest,src,x,y+1,color1,color2,minx,miny,maxx,maxy)
end
#右
if (src[y][x+1] == color2) && (dest[y][x+1] != color1)
refill(dest,src,x+1,y,color1,color2,minx,miny,maxx,maxy)
end
end
582NAS6 ◆n3AmnVhjwc
2016/01/05(火) 08:16:57.10ID:FnNfbNzM >>576-577
も同様に直してね
も同様に直してね
583NAS6 ◆n3AmnVhjwc
2016/01/05(火) 08:48:45.20ID:FnNfbNzM recHoge2(term,arg1...argn){
dobefore(arg1...argn);
if(term)recHoge2(term,arg1...argn);
doafter(arg1...argn);
}
この↑再帰関数を無理矢理
loopHoge2(term,arg1...argn){
while(term){
pushargstack(arg1...argn);
dobefore(arg1...argn);
if(term){continue;}
popargstack(arg1...argn);
doafter(arg1...argn);
}
}
ループで書くのはpushargstack()popargstack()書くのもだし
再帰関数でreturnされた時の箇所で
制御をdoafter()に飛ばすように考えるのもめんどくさい
つまり、再帰関数の構造化の部分までなんでわざわざ
コーディングする必要があるのか謎
dobefore(arg1...argn);
if(term)recHoge2(term,arg1...argn);
doafter(arg1...argn);
}
この↑再帰関数を無理矢理
loopHoge2(term,arg1...argn){
while(term){
pushargstack(arg1...argn);
dobefore(arg1...argn);
if(term){continue;}
popargstack(arg1...argn);
doafter(arg1...argn);
}
}
ループで書くのはpushargstack()popargstack()書くのもだし
再帰関数でreturnされた時の箇所で
制御をdoafter()に飛ばすように考えるのもめんどくさい
つまり、再帰関数の構造化の部分までなんでわざわざ
コーディングする必要があるのか謎
584デフォルトの名無しさん
2016/01/05(火) 23:45:47.40ID:zRwuHMxA そうだね、グリーンだね。
任意の再帰はスタックを使えばループに書き直せるし、任意のループは末尾再帰で書き表せるけど
書きやすい方で書いたら良いんじゃない?
配列を舐めるだけのループをわざわざ再帰で書く必要はないし、
二分木を舐めるだけの再帰をわざわざループで書く必要はない。
勿論例外は幾つもあるけどね。
任意の再帰はスタックを使えばループに書き直せるし、任意のループは末尾再帰で書き表せるけど
書きやすい方で書いたら良いんじゃない?
配列を舐めるだけのループをわざわざ再帰で書く必要はないし、
二分木を舐めるだけの再帰をわざわざループで書く必要はない。
勿論例外は幾つもあるけどね。
585uy ◆Qawu9.2l1E
2016/01/06(水) 01:13:15.45ID:kZN9AhFE 死ね → NAS6 ◆n3AmnVhjw
586デフォルトの名無しさん
2016/01/06(水) 01:26:34.40ID:2plodUsJ >>585
語彙少なすぎだろ
語彙少なすぎだろ
587uy ◆Qawu9.2l1E
2016/01/06(水) 05:38:10.76ID:NwAUbAKq 時間とフィンガーポイントを無駄にしたくない
588デフォルトの名無しさん
2016/01/06(水) 11:44:51.16ID:Hrty1iRZ ばいばい
589uy ◆Qawu9.2l1E
2016/01/07(木) 03:29:43.72ID:VBUUQOGk MPC
590デフォルトの名無しさん
2016/01/07(木) 14:29:25.41ID:9s+XESwg591デフォルトの名無しさん
2016/01/07(木) 23:10:34.37ID:ceukK3gk またuyが言い負かされてると聞いて
592uy ◆Qawu9.2l1E
2016/01/08(金) 07:36:31.52ID:37pbuAYe http://kakaku.com/item/K0000791258/
これを使ってるけど打ちにくい
隙間にゴミが入りにくいキーボードで何か探してくれれば長文レス出来るけど
ゲームもやるから同時押しが出来ないキーボードは使えないんだよ
バッファローのこのキーボード系列は
何故かゲーミングキーボードでもない癖にかなりの同時押しが出来る
お前らもこれくらい社会の役に立ってくれ
これを使ってるけど打ちにくい
隙間にゴミが入りにくいキーボードで何か探してくれれば長文レス出来るけど
ゲームもやるから同時押しが出来ないキーボードは使えないんだよ
バッファローのこのキーボード系列は
何故かゲーミングキーボードでもない癖にかなりの同時押しが出来る
お前らもこれくらい社会の役に立ってくれ
593デフォルトの名無しさん
2016/01/08(金) 07:58:14.49ID:qSmN42Fw 長文レスなんざしなくていいから死ね
594デフォルトの名無しさん
2016/01/08(金) 08:06:15.22ID:t0B3KsjR ゲームなどという恥ずかしいご趣味をお持ちのようで
595デフォルトの名無しさん
2016/01/08(金) 12:51:08.30ID:OGMciHiU tail callはrecursive callと直行する概念だと理解してないのが何人かいるな
596デフォルトの名無しさん
2016/01/08(金) 12:54:36.23ID:qoujFuKs 直行てなんやねんwてのが何人もいるな
597デフォルトの名無しさん
2016/01/08(金) 13:19:39.58ID:39T3KdLp 読みやすい方で書いたらいいんちゃうの?
無理にループにしてソース長くしてテスト項目増やす奴の気がしれんわ
無理にループにしてソース長くしてテスト項目増やす奴の気がしれんわ
598デフォルトの名無しさん
2016/01/08(金) 13:22:10.55ID:39T3KdLp 取り敢えずutがカスだってのは旗から見てわかった
補足しておくけどループで済むものを再起にしろと言ってるわけではないからな
補足しておくけどループで済むものを再起にしろと言ってるわけではないからな
599デフォルトの名無しさん
2016/01/08(金) 14:05:20.20ID:qSmN42Fw そりゃrecursiveじゃないtail callなんざ幾らでもあるわ
レスを投稿する
ニュース
- 【速報】中国、高市氏答弁撤回求め国連に2度目書簡 [蚤の市★]
- 【少子化】少子化は女のせい?男のせい?SNSで不毛すぎる議論が勃発…「産ませる発言」vs「淘汰される遺伝子」泥沼バトルへ ★3 [ぐれ★]
- 外国人の労働力「反対」59%…読売・早大共同世論調査 [蚤の市★]
- 日テレ社長 国分太一に「答え合わせするまでもない」 聴取時の内容そのものが「コンプライアンス違反」 [Ailuropoda melanoleuca★]
- 【F1】角田裕毅のレッドブルグループ退団が決定 海外メディアが一斉報道「彼の居場所はない」 [鉄チーズ烏★]
- 【為替】円154円台に上昇、NY株400ドル超安 日米金利差の縮小観測広がる [蚤の市★]
- 【実況】博衣こよりのえちえち朝こよ🧪★2
- 「私は『一つの中国』を支持します」と表明した日本人アーティスト、中国での大規模公演も全く支障なく完全成功→ネトウヨ「裏切り者!」 [314039747]
- バターとかいう濃くすると味が薄くなる謎の食材
- 2030年までに日本人の25%が「AIリストラ」で職を失う模様 [329271814]
- 26歳公認会計士をハサミで突き殺した佐藤琴美さん(26)「ハゲすぎる、毛を生やせ」などと日常的に暴力 [963243619]
- 漫画銭湯「カポーン」←これなんなの?
