探検
なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
1デフォルトの名無しさん
2015/11/28(土) 18:51:38.86ID:Rc2MJzM/ なあ、再帰関数好きな人いる?
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なんざ幾らでもあるわ
600デフォルトの名無しさん
2016/01/08(金) 14:44:50.10ID:oo2zXXZh601デフォルトの名無しさん
2016/01/08(金) 19:53:25.00ID:XdIzL1DI 仮にもプログラマならHHK使ってます自慢くらいしろよっていう
そういう俺はreal forceだけど。
そういう俺はreal forceだけど。
レスを投稿する
ニュース
- 【速報】政府、与党がNISA未成年解禁を検討 [蚤の市★]
- 【TV】ファン5万人がガチで投票! プロ野球総選挙、栄えある1位は [牛丼★]
- 日テレ、国分太一の「答え合わせ」を却下 「答え合わせをするまでもない」「心当たりがあると述べられている」★ 2 [muffin★]
- 【茶葉高騰】「綾鷹」値上げで650mL220円に 26年3月から [1ゲットロボ★]
- 【女子ゴルフ】都玲華(21)30歳年上の既婚者コーチとの交際関係とコーチ契約解消「昨年からお付き合いしてました。」 [阿弥陀ヶ峰★]
- 【おこめ】ベトナムから密輸のコメを「国産」と偽り販売容疑、ベトナム人ら2人追送検…300トン売って1億3000万円稼いだか 大阪 ★2 [ぐれ★]
- 【実況】博衣こよりのえちえちSSholoX4周年🛸💜🥀🧪🍃
- 【実況】博衣こよりのえちえちSSholoX4周年🛸💜🥀🧪🍃★2
- 成人した国民の4分の3が被害 史上最悪の個人情報流出 中国籍の元社員が持ち去り [459590647]
- 【悲報】たぬかな、イベント辞退「身の安全を確保できない」 [329329848]
- 【悲報】とうふさん、死亡🏡
- 【悲報】東京の満員電車、海外SNSで世界のお笑いコンテンツになるww「途上国w」「東京人は貧乏なんだ」「可哀想ww」 [732289945]
