X



なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net

0001デフォルトの名無しさん
垢版 |
2015/11/28(土) 18:51:38.86ID:Rc2MJzM/
なあ、再帰関数好きな人いる?
0544デフォルトの名無しさん
垢版 |
2016/01/04(月) 10:03:14.86ID:hsfrcHKj
いいなそれ
0545デフォルトの名無しさん
垢版 |
2016/01/04(月) 12:27:00.00ID:U406TFbL
再帰好きの人のを中二コーダーと呼びたい
0546uy ◆Qawu9.2l1E
垢版 |
2016/01/04(月) 15:06:50.79ID:KNqXLa56
>>542
理解力なさすぎだな
お前の学校の担任はさぞかし苦労したことだろう
0547デフォルトの名無しさん
垢版 |
2016/01/04(月) 16:24:41.19ID:u97FRQbx
>>546
どんな点をみて「理解力がない」と判断したのか?
説明できますかね,それとも吼えるだけ?
0548NAS6 ◆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()...
 }
}
再帰で有意味、この場合使える
0549NAS6 ◆n3AmnVhjwc
垢版 |
2016/01/04(月) 17:44:32.72ID:7uWOp/tU
pop,push逆だった
loopHoge2(a,n,arg...){
 while(a<n){
  popargstack();
  dobefore()...
  pushargstack();
  doafter()...
 }
}
0550NAS6 ◆n3AmnVhjwc
垢版 |
2016/01/04(月) 18:00:09.14ID:7uWOp/tU
pushargstack();
popargstack();
ユーザー定義のこれらはめんどくさいから
再帰関数使ってコンパイラ任せにするよ
0551uy ◆Qawu9.2l1E
垢版 |
2016/01/04(月) 18:13:29.66ID:zTvWipKl
またゴミカス初心者が来たけど
また1から説明して教育しなきゃいけないの?
0552NAS6 ◆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();
ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ
たったこれだけの内容
0553NAS6 ◆n3AmnVhjwc
垢版 |
2016/01/04(月) 18:19:28.48ID:7uWOp/tU
>>551
>>552
以上のことの何があるか説明してみてよ
0554NAS6 ◆n3AmnVhjwc
垢版 |
2016/01/04(月) 18:42:48.29ID:7uWOp/tU
ttp://nas6.main.jp/Maze.cpp

再帰、ループ、等価迷路
0555NAS6 ◆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();
ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ
たったこれだけの内容 、勘違い訂正
0556NAS6 ◆n3AmnVhjwc
垢版 |
2016/01/04(月) 19:03:49.25ID:7uWOp/tU
>>554で、
ループ実装が好きなやつはいないと思うんだけどな
0557uy ◆Qawu9.2l1E
垢版 |
2016/01/04(月) 21:13:17.67ID:KNqXLa56
RubyかPythonで書き直して
C++とかいうゴミいらねーから
0558NAS6 ◆n3AmnVhjwc
垢版 |
2016/01/04(月) 21:51:32.16ID:7uWOp/tU
「{C++規則をかなり抑えてCライク}で書かれたソースコード」
のクロスランゲッジなんて、ほぼ、ライブラリの関数名を書き換えるだけだろ
0559NAS6 ◆n3AmnVhjwc
垢版 |
2016/01/04(月) 21:54:46.92ID:7uWOp/tU
あ、あと制御構文もちゃっちゃっと書き換えれば出来上がり
0560uy ◆Qawu9.2l1E
垢版 |
2016/01/04(月) 22:07:47.26ID:mZvmD2Em
それをなぜ最初から簡潔な言語で書かないで
わざわざ冗長したC++・C言語といった言語でドヤァとソースコード貼りつけてくるのか、理解しがたいんだけど
カスレベルの初心者である事を数レスに渡る自己紹介でもしにきたのかね?
アルゴリズムの抽象化でC++とか使う奴はその時点で初心者だって一瞬で分かるって言ってるのに
自分が知恵遅れだと分かってないままの奴が続々現れるからこういう場所は話題がループする
0562デフォルトの名無しさん
垢版 |
2016/01/04(月) 22:23:59.40ID:JpzJLk3f
熱烈なC++アンチって速度要求される場面に出会ったことがないんだろな
もしくはフォートラン信者なんだろな
0563デフォルトの名無しさん
垢版 |
2016/01/04(月) 22:31:14.13ID:OFaVtQHO
オッパイソンはベーシックみたいなもんで非プログラマが使うのに適してるけど、
プログラマが使うには色々しょぼすぎ。
ペイントショッププロのマクロにオッパイソンが採用されたときは、来るかと思ったけど、
それを機に没落していった。
イヌックスの呪いは有名だけど、オッパイソンの呪いもあるのかもしれん。
0564デフォルトの名無しさん
垢版 |
2016/01/04(月) 22:35:24.75ID:OFaVtQHO
しかし、エクセルのマクロ使いはザラにいるのに、他のアプリはマクロ使いが
ほとんどいないんだよな。
イーマックソとか言うウンコは置いといて。
CADなんかマクロの使いであると思うのだが。
Autocadなんかウンコ使いが泣いて喜ぶLisp搭載してるのにな。
なんでだ。
0566NAS6 ◆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
0567NAS6 ◆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
0568NAS6 ◆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

で、こんだけで済むのに、
ループにしたいからって
スタックのユーザー定義なんて馬鹿だろう
0569NAS6 ◆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
0570uy ◆Qawu9.2l1E
垢版 |
2016/01/05(火) 02:57:13.31ID:/kPL7pQm
プログラミング半年目くらいだろうかコイツは
多く見積もって1年半
それ以上なら今すぐPC捨てたほうが良いレベル
0572デフォルトの名無しさん
垢版 |
2016/01/05(火) 02:59:25.81ID:CnA8UQLB
 
 
  
死ねカス
0573NAS6 ◆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
0574NAS6 ◆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
0575NAS6 ◆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

↑のループ等価が↓
0576NAS6 ◆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
0577NAS6 ◆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
0578NAS6 ◆n3AmnVhjwc
垢版 |
2016/01/05(火) 07:34:06.45ID:FnNfbNzM
再帰関数を無理矢理ループで書くことが
正解だなんてとても思えないんだけど・・・
0579NAS6 ◆n3AmnVhjwc
垢版 |
2016/01/05(火) 07:57:54.39ID:FnNfbNzM
>>575-577
はdestにcolorが最初から使われていると、それ以上塗れないバグがあるな
ま、いいか
0580NAS6 ◆n3AmnVhjwc
垢版 |
2016/01/05(火) 08:01:46.66ID:FnNfbNzM
destはコピー先だからそういう条件でクリア済みってことで
0581NAS6 ◆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
0582NAS6 ◆n3AmnVhjwc
垢版 |
2016/01/05(火) 08:16:57.10ID:FnNfbNzM
>>576-577
も同様に直してね
0583NAS6 ◆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()に飛ばすように考えるのもめんどくさい
つまり、再帰関数の構造化の部分までなんでわざわざ
コーディングする必要があるのか謎
0584デフォルトの名無しさん
垢版 |
2016/01/05(火) 23:45:47.40ID:zRwuHMxA
そうだね、グリーンだね。

任意の再帰はスタックを使えばループに書き直せるし、任意のループは末尾再帰で書き表せるけど
書きやすい方で書いたら良いんじゃない?
配列を舐めるだけのループをわざわざ再帰で書く必要はないし、
二分木を舐めるだけの再帰をわざわざループで書く必要はない。
勿論例外は幾つもあるけどね。
0587uy ◆Qawu9.2l1E
垢版 |
2016/01/06(水) 05:38:10.76ID:NwAUbAKq
時間とフィンガーポイントを無駄にしたくない
0592uy ◆Qawu9.2l1E
垢版 |
2016/01/08(金) 07:36:31.52ID:37pbuAYe
http://kakaku.com/item/K0000791258/
これを使ってるけど打ちにくい
隙間にゴミが入りにくいキーボードで何か探してくれれば長文レス出来るけど
ゲームもやるから同時押しが出来ないキーボードは使えないんだよ
バッファローのこのキーボード系列は
何故かゲーミングキーボードでもない癖にかなりの同時押しが出来る
お前らもこれくらい社会の役に立ってくれ
0596デフォルトの名無しさん
垢版 |
2016/01/08(金) 12:54:36.23ID:qoujFuKs
直行てなんやねんwてのが何人もいるな
0597デフォルトの名無しさん
垢版 |
2016/01/08(金) 13:19:39.58ID:39T3KdLp
読みやすい方で書いたらいいんちゃうの?
無理にループにしてソース長くしてテスト項目増やす奴の気がしれんわ
0598デフォルトの名無しさん
垢版 |
2016/01/08(金) 13:22:10.55ID:39T3KdLp
取り敢えずutがカスだってのは旗から見てわかった

補足しておくけどループで済むものを再起にしろと言ってるわけではないからな
0601デフォルトの名無しさん
垢版 |
2016/01/08(金) 19:53:25.00ID:XdIzL1DI
仮にもプログラマならHHK使ってます自慢くらいしろよっていう

そういう俺はreal forceだけど。
0604デフォルトの名無しさん
垢版 |
2016/01/09(土) 19:28:51.30ID:j10t/SxZ
芸能界で生きていけるレベルの芸だな。
0605uy ◆Qawu9.2l1E
垢版 |
2016/01/13(水) 15:37:06.33ID:KvZEN8k1
自分はプログラマじゃないんだよ
目的を最高効率で達成する事を念頭に置いてるスクリプトキディだ

そして複数人でプログラムを組むときに必要なノウハウなんて持ってない
そもそも自分はそういう事をしなくて良いから、生きてく上で必要無い配慮だから
周りが読みにくいとか知った事ではないし

身分がちげーんだよカス
0606デフォルトの名無しさん
垢版 |
2016/01/13(水) 16:53:37.49ID:QjeDGB/s
スクリプトキディの意味も知らないのな
0607デフォルトの名無しさん
垢版 |
2016/01/13(水) 16:58:20.95ID:4eNfFdO0
(他人の作った)スクリプトを使うしか能の無いお子様

正しく自分のこと理解してるということでいいのかもしれないですね。
0608デフォルトの名無しさん
垢版 |
2016/01/13(水) 18:34:23.73ID:QjeDGB/s
正しく自分を理解していたら、あんなバカな生態を晒し続けるわけが無い

スクリプトキディとは、他人の作ったスクリプトでいたずらしてはしゃぐお子様の事だね
0615デフォルトの名無しさん
垢版 |
2016/01/15(金) 20:31:31.62ID:POz82VxF
まともなプログラムは再帰使わないて
Javaじゃ標準でhashでもvisitorでも使ってるやん
初心者かな?
0616デフォルトの名無しさん
垢版 |
2016/01/15(金) 20:52:05.45ID:DNDI2k7a
>>615
ウェブサイトがハッキングされるのはそのせいかもしれませんね。
0617デフォルトの名無しさん
垢版 |
2016/01/15(金) 20:59:16.36ID:POz82VxF
ワロタ
何別人ぶってるんだコイツ
0618デフォルトの名無しさん
垢版 |
2016/01/15(金) 21:40:58.93ID:bARE8Ecx
Javaがまともじゃないとか何様だよ
0619デフォルトの名無しさん
垢版 |
2016/01/15(金) 22:51:22.58ID:DNDI2k7a
Haskellを知ればJavaなんぞ子供のおもちゃにも及ばない。
0621デフォルトの名無しさん
垢版 |
2016/01/16(土) 20:53:37.66ID:mv0cs2FW
データベース扱いにくいゴミ
0622デフォルトの名無しさん
垢版 |
2016/01/16(土) 22:18:41.95ID:8IHN4wdz
データベースは扱いにくいゴミだそうです。
0623デフォルトの名無しさん
垢版 |
2016/01/17(日) 15:36:45.95ID:LBaM8j14
いや、もしかしたら
データベースを扱うのに困難を伴うゴミ人間って意味かも
0624デフォルトの名無しさん
垢版 |
2016/01/17(日) 18:00:23.51ID:UWpoaTz9
もしかして、もしかしてだけどさ、Haskelのこと言ってるんじゃね?
0626デフォルトの名無しさん
垢版 |
2016/01/18(月) 20:02:16.24ID:DTRfKFLk
世界一のデータベースを持つと言われるGoogleがHaskellで動いているくらいだからね。
0628デフォルトの名無しさん
垢版 |
2016/01/19(火) 15:31:29.42ID:py3nDmvs
おもちゃだよ
Googleのおもちゃ
0631デフォルトの名無しさん
垢版 |
2016/01/20(水) 17:52:59.34ID:Evm4j3E4
漏れらとか使う香具師久しぶりに見たわ
0632デフォルトの名無しさん
垢版 |
2016/01/20(水) 19:02:11.21ID:aKBKow0I
イッテヨシとかギコはにゃーんとかもう死語なんだろうな。
ゴルァはまだありかな。
0633デフォルトの名無しさん
垢版 |
2016/01/21(木) 12:48:08.73ID:zpe1QHZ3
ヌルポにはガッっていうのはなぜだったのか理由がいまだに判らないので
香具師にどう反応すればいいのかも判らない
0635デフォルトの名無しさん
垢版 |
2016/01/22(金) 01:18:00.03ID:G5rv7JJ3
>>633
NullPointerExceptionをぬるぽと呼ぶスレだかなんだかいうスレタイのスレが立った2分後に
2が1にガッしたから

だった筈
0637デフォルトの名無しさん
垢版 |
2016/01/22(金) 17:22:39.92ID:AzZButyZ
たたき続けなさい
さすればヌルポは失せるでしょう
0640デフォルトの名無しさん
垢版 |
2016/01/31(日) 18:53:58.36ID:N9Aq8poo
>>638
そしてスローせず
0641デフォルトの名無しさん
垢版 |
2016/01/31(日) 21:42:25.99ID:OzonL4m2
ガッはガッチャの略だろ。 ガッチャマンでお馴染みのガッチャはI have got you.の略で捕まえたとかの意味。
0642デフォルトの名無しさん
垢版 |
2016/02/01(月) 01:42:44.99ID:IP+vl4xQ
でもアメリカのドラマ見てると了解するときにガッチャ!って言ってるよね。
特にチャーリーズエンジェルのカエル顔が(別のドラマでも)言ってるような気がする。
レスを投稿する


ニューススポーツなんでも実況