X



なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
0001デフォルトの名無しさん
垢版 |
2015/11/28(土) 18:51:38.86ID:Rc2MJzM/
なあ、再帰関数好きな人いる?
0101デフォルトの名無しさん
垢版 |
2015/12/02(水) 18:34:40.93ID:73uUfhWJ
uyなかなかやるな。
ググって解答見た可能性もあるが、ググれるのも実力のうちだからな。
0102.パンティーガァル
垢版 |
2015/12/02(水) 20:57:19.51ID:V8iEgN6C
>>90
> ちなみにここ一週間のuyの生活は、朝起きて、ネトゲして朝寝る です。
悲観することはない(してないかもしれないがw)
それも一つの生き方だ
人間の人生などそんなものだ
0107デフォルトの名無しさん
垢版 |
2015/12/03(木) 17:30:30.61ID:Sp77D/ez
>>104
ack(3,10)を100回計算させたところ

ループ 3.99秒
再帰 4.50秒

だった。微妙にループが速い。
言語はg++ 最適化あり
0108 ◆tAo.kQ2STk
垢版 |
2015/12/03(木) 17:54:16.46ID:cYXsvyZR
>>106
でも115行目以降は>>103に比べてスマートじゃない?
アッカーマン関数をより素直に表現している(ように見える)というか。

テンプレートその他がひじょーに面倒臭い事になってるのは認めるよww
0116デフォルトの名無しさん
垢版 |
2015/12/05(土) 12:08:54.94ID:75VGJDuj
再起関数難しくて苦手だわ
0117デフォルトの名無しさん
垢版 |
2015/12/05(土) 12:38:44.60ID:vOhmiziG
おいらも苦手だわ
0118デフォルトの名無しさん
垢版 |
2015/12/05(土) 12:50:09.98ID:fWHJ2v3J
アッカーマンを知ったばかりで嬉しくてしょうがないんだろうな
俺くらいになるとどうでもよくなるけど
0120デフォルトの名無しさん
垢版 |
2015/12/05(土) 14:24:24.30ID:FIUesRuL
>>118
アッカーマン関数が原始帰納関数でない証明を頼む。
定義がシンプルかつ一般帰納関数になるように
アッカーマンさんが構成したらしいが。
0128デフォルトの名無しさん
垢版 |
2015/12/10(木) 23:27:19.50ID:ZuWvmJPo
んーなんかプログラムカウンタに相当するものをスタックに積まなきゃいけない感じ?
0131デフォルトの名無しさん
垢版 |
2015/12/11(金) 18:14:40.60ID:H0NYZxX+
>>130
何言ってるんだ。。
ループで書けば早い、自分でスタック作れば、って言ってるループキチガイに、
命令にもこういうのがあるよ、必要だからあるんだよ。
と教えてあげてはどうだ?
0132デフォルトの名無しさん
垢版 |
2015/12/11(金) 18:27:07.72ID:FXKTAEC3
>命令にもこういうのがあるよ、必要だからあるんだよ。

だからどうしたとしか。
基地外宗教を布教するなら、自分でするんだね。
0135デフォルトの名無しさん
垢版 |
2015/12/11(金) 19:40:32.13ID:DIOiIqvd
>>134
MIPSのjalとjrとか。
callとretに相当。
jal相当すらなくてpcのレジスタ保存命令しかないのもあった。
0137uy ◆Qawu9.2l1E
垢版 |
2015/12/14(月) 05:58:59.61ID:0uboKikK
まずはこの手のアルゴリズム抽象化でC++使うのをやめろ
効率悪すぎ
0138uy ◆Qawu9.2l1E
垢版 |
2015/12/14(月) 06:02:04.72ID:WJU5GahL
ツリーのイテレータっつうか
ゲームプログラミング的にいえばツリー構造のタスクシステム
ゲームプログラミングしてれば普通に書いてるような低レベルの話
0139 ◆tAo.kQ2STk
垢版 |
2015/12/14(月) 11:28:00.80ID:v4oN6dOD
>>136
ツリーのイテレータの書き方は大きく分けて3種類ある。
一つ目はイテレータ自身に「どのノードを辿ってきたか」って情報を覚えさせておいてそれを用いる方法
イテレータの空間効率がO(log n)になる代わりにサクセッサの時間効率が平均でO(1)になる。
二つ目はイテレータ自身にキーを覚えさせておいて、一旦そのキーを手繰ってから次のノードを手繰り直す方法
イテレータの空間効率がO(1)になる代わりにサクセッサの時間効率がO(log n)になる。
三つ目は木構造の各葉っぱに次の葉っぱへのポインタを書いておく方法
イテレータの空間効率がO(1)、サクセッサの時間効率がO(1)になる代わりに葉要素のサイズがO(1)増える。
0141uy ◆Qawu9.2l1E
垢版 |
2015/12/14(月) 15:02:59.78ID:WIf5dtaV
それ種類じゃなくて、全部組み合わせて実装したほうが汎用的じゃねーの

class A
  attr_accessor :up , :key , :list , :data
end

最低でも1と3のup listは無ければ木構造にならないだろ
君の考えは prev(up) と next(list) になってる
0143uy ◆Qawu9.2l1E
垢版 |
2015/12/14(月) 21:12:22.29ID:WIf5dtaV
まず、ツリーにしたらそれはイテレータとは呼ばないから
ただのツリーを走査する為の関数に過ぎない

「イテレータ」にしか使用できないツリーじゃなくて
一通りの事に使用できるツリークラス作れば?って話
0144デフォルトの名無しさん
垢版 |
2015/12/14(月) 21:30:28.83ID:lwFUcSQC
function NodeIterator(node, childNodesName) {
  this._stack = [node];
  this._name = childNodesName;
}
NodeIterator.prototype.hasNext = function() {
  return this._stack.length > 0;
}
NodeIterator.prototype.next = function() {
  var node = this._stack.pop();
  if (node) {
    for (var i = node[this._name].length -1; i > -1; --i) {
      this._stack.push(node[this._name][i]);
    }
  }
  return node;
}

ノードの親や深さも欲しい時は、スタックに積むノードをオブジェクトでラップして親の参照や深さを持たせればいいかも
0145デフォルトの名無しさん
垢版 |
2015/12/14(月) 22:23:44.30ID:S7hw1GZs
uyのイテレータの定義がさっぱりわからん。
俺はC++STLのイテレータを想像しているんだが。
uyの言ってるイテレータはなんのイテレータなんだ?
0146デフォルトの名無しさん
垢版 |
2015/12/14(月) 23:47:42.33ID:S7hw1GZs
uyが言ってるのはツリーで実装されたイテレータということかな?
俺が言いたいのはツリーを巡回するイテレータなんだが?
0148uy ◆Qawu9.2l1E
垢版 |
2015/12/15(火) 02:28:13.41ID:hKbS74r3
センスないと無理
0150uy ◆Qawu9.2l1E
垢版 |
2015/12/15(火) 02:44:41.16ID:xpC/Gts5
例えば
[1,2,3,4] ← これをイテレートするのがイテレータだろ?

ツリーは
[1,2,[3,4,[5,6]]] ← これをイテレートしたいのが作りたいイテレータだろ?


下のはイテレータと表現するまでもなくプログラム中でツリー構造が必要になって、
「ツリークラス」ってのを定義した事あれば、そんなのは標準実装しているレベルのものだから、わざわざツリーのイテレータなんていう半端なものは誰も作らない

作る順序的にまずはイテレータのツリー化じゃなくて、ツリークラスの定義
考えが追いつかないなら好きな順序で作れば良いけど
0151デフォルトの名無しさん
垢版 |
2015/12/15(火) 07:32:58.54ID:1zInVUKk
ツリーオブジェクトにtoArray()メソッドを用意すれば
すべて解決すると思うの。
0152デフォルトの名無しさん
垢版 |
2015/12/15(火) 10:44:59.05ID:kfL23r5/
大富豪プログラミングだなtoArray()
ツリーなんかはサイズが非常にデカくなることがしばしばあるぞ。
0155 ◆tAo.kQ2STk
垢版 |
2015/12/15(火) 19:28:58.56ID:1tm7yObV
>>153
違うよ。人間が読める某文字列をキーにしたらその酉が作れる。

ところでさ、どうでも良いんだけど
今話題にしてるのは木構造
>>141が示したデータ構造は無向グラフ
・・・・・・だよね?
0156デフォルトの名無しさん
垢版 |
2015/12/15(火) 22:38:36.35ID:WpFCIHcQ
ツリーじゃね
0157デフォルトの名無しさん
垢版 |
2015/12/15(火) 22:42:50.33ID:kfL23r5/
参照が木構造になってるかグラフになってるかなんて実行時に決まることじゃないのか?
0158デフォルトの名無しさん
垢版 |
2015/12/16(水) 03:41:52.77ID:L2apS2Qu
何だこの池沼w
0159デフォルトの名無しさん
垢版 |
2015/12/16(水) 09:38:17.31ID:VSvjkteq
ごめん
0165デフォルトの名無しさん
垢版 |
2015/12/19(土) 16:48:17.67ID:mZAnd63z
再帰と繰り返しは相互に変換可能なんだから、再帰で実行時間が読めないならば、繰り返しでも読めない。
こんなじょうしきも知らないの?
0166デフォルトの名無しさん
垢版 |
2015/12/19(土) 20:02:11.53ID:owy4KRbC
ごめん
0167デフォルトの名無しさん
垢版 |
2015/12/19(土) 20:16:05.69ID:hx9j/3Ds
再帰はシステムダウンの危険がある。
処理速度もはるかに遅くなる。

再帰の場合には、こうした実行時間が読めない特有の問題点がある。
0168デフォルトの名無しさん
垢版 |
2015/12/19(土) 22:02:48.92ID:EjHtX5K0
> 再帰はシステムダウンの危険がある。
そう言う環境ならば、システムダウンの可能性は繰り返しでもある。

> 処理速度もはるかに遅くなる。
ヘボが作った繰り返しは再帰よりはるかに遅い。
0173uy ◆Qawu9.2l1E
垢版 |
2015/12/20(日) 01:30:16.73ID:cCXQYS6+
# 1
def f
 if 条件
  処理
 else
  f()
 end
end

# 2
def f
 if 条件
  f()
 end
end


# 3
def f
 case 条件
 when LABEL
  f()
 end
end


末尾再帰されるパターンわからない奴wwwwwwwwwwwwっうぃる? 
0175デフォルトの名無しさん
垢版 |
2015/12/20(日) 12:14:12.80ID:8RLYRFXT
>>175
漸化式
0177デフォルトの名無しさん
垢版 |
2015/12/20(日) 14:49:43.30ID:zNzoBoA2
ID:EjHtX5K0のような白痴ばかりだから
再帰厨だと馬鹿にされることになる。

再帰を愛して使うんだったら、
ループ版にはない深刻なデメリットがある事ぐらいちゃんと注意した上で、
効率や安全性を無視したプログラミングを楽しむべき。
0178デフォルトの名無しさん
垢版 |
2015/12/20(日) 17:18:50.85ID:37nsyMmy
繰り返しの唯一の利点は回数の制御が再帰よりも容易であること。
これ以外の利点はない。

バカにはそれが理解できないらしいが。
0180デフォルトの名無しさん
垢版 |
2015/12/20(日) 18:23:24.49ID:/qKlyz5E
ごめん
0181デフォルトの名無しさん
垢版 |
2015/12/20(日) 19:26:33.84ID:37nsyMmy
再帰はID:zNzoBoA2のように低知能には理解不能という弱点があるけど
ID:zNzoBoA2のような低知能の出現率は低いので全然問題無い
むしろ低知能者を検出試験としてのメリットの方が大きい
0182デフォルトの名無しさん
垢版 |
2015/12/20(日) 22:01:31.82ID:ywvYIxL3
再帰苦手だから何でもかんでもループ使ってすまん
0184デフォルトの名無しさん
垢版 |
2015/12/20(日) 22:51:10.83ID:zNzoBoA2
もし再帰が理解出来たつもりなら、ちゃんとループに直せるぐらいのプログラミング技術は備えなくちゃ。

最低でもそれくらいの技術や知能が無ければ
再帰を楽しむことはできないよ。
0185デフォルトの名無しさん
垢版 |
2015/12/21(月) 02:17:48.47ID:EKnooMo4
「再帰には深刻なデメリットがある」キリッ
なんて発言する低知能人は再帰を理解してるはずが無い、理解不能なものを怖れている。未開人と同じ。
0186デフォルトの名無しさん
垢版 |
2015/12/21(月) 09:54:25.69ID:S8kWm1db
ループを恐れるのは、ループにするだけの知識・経験を欠いているから。

その程度じゃあプログラミングの世界からすぐに消えるだけの存在。
再帰厨は、現実で満たされないのでスレで妄想を垂れ流すことしかできないクズ。
0187デフォルトの名無しさん
垢版 |
2015/12/21(月) 10:52:48.60ID:zel3cCjW
関数内にjmpも好き勝手にやるタイプだからどうとも言わんけど、
再帰否定派はまさか単一のアーキテクチャの話してないよな?
アルゴリズムとして再帰がイケてないって話だよな?
0188デフォルトの名無しさん
垢版 |
2015/12/21(月) 14:23:04.48ID:MyhUNItP
そうなのか?
0189デフォルトの名無しさん
垢版 |
2015/12/21(月) 14:51:29.83ID:EKnooMo4
>>186
必死で再帰を否定しているバカを弄っているだけで、繰り返しを否定しているわけでは無い

やっぱり低知能なんだな。
0190デフォルトの名無しさん
垢版 |
2015/12/21(月) 18:43:17.30ID:u4st+H+L
みなさん、これが「弄ってるって言いたいバカ」ですw
0191デフォルトの名無しさん
垢版 |
2015/12/22(火) 08:48:59.73ID:kujr6tD9
迷信を信じ込んで再帰を否定してるバカが
深刻なデメリット(爆笑)、例えば
> 処理速度もはるかに遅くなる。
を、実証すればスレ終了するのに。
0192デフォルトの名無しさん
垢版 |
2015/12/22(火) 11:16:51.41ID:4uBr+2Cy
>>191
そういう超基本的なプログラミング知識が無いのに
なんでプログラム板にいるの?

そもそもプログラミング経験無いだろ、お前。
0193 ◆tAo.kQ2STk
垢版 |
2015/12/22(火) 12:54:32.04ID:S5fGjlFA
異様に伸びてると思ったら深刻な問題祭りかい

いくらでも例外は挙げられるけど
再帰で書こうがループで書こうが計算時間や空間計算量はそんなに変わらんから
書きやすく、読みやすい方で書いたほうが良いんじゃない?

そんなに変わらないって言うのは十分大きな入力に対して精々2〜3倍以下に納まるって意味だからね。
1時間掛かる処理を20マイクロ秒速くする為にごちゃごちゃ書き換えるのは結構な事だけど。
0194デフォルトの名無しさん
垢版 |
2015/12/22(火) 14:08:14.84ID:dkSLpih8
はるかと言っても所詮定数倍でしょ。
しかも一桁違うケースは
関数呼び出しがやや高価なスクリプト系の言語でもほとんどないでしょ。
0195デフォルトの名無しさん
垢版 |
2015/12/22(火) 17:31:14.37ID:qPz15M1W
>>193
いやね,絶対的に再帰でないと書けない,いや非常に書きにくいものはあるのは確かで.
たとえば代数式の解析を非再帰的で記述しろといわれると「はたして出来るのか??」と逡巡してしまう.
こういう話題があまり発展しないのはどうしたわけですかね

関係ないけどquick-sort を三項演算子とコンマ演算子で書く話題,誰か‥私は挫折した‥
0196uy ◆Qawu9.2l1E
垢版 |
2015/12/22(火) 18:25:40.50ID:/7VurpfC
再帰の深刻なデメリットと言えば、コンパイラ設計者が甘えてる事によってバグを触ったり
異常に速度遅くなるパターンが放置されてたりする事

なんの言語とは言わないけど
0197デフォルトの名無しさん
垢版 |
2015/12/22(火) 19:03:19.84ID:8Du/ashj
それは再帰のデメリットではなくそういうクソコンパイラしかない言語のデメリット
0198デフォルトの名無しさん
垢版 |
2015/12/22(火) 22:57:38.64ID:kujr6tD9
>>192
能書きはいいからとっとと実証しろ。超基本的な知識なんだろ。

「はるかに遅い」とか言ってるバカ仲間のサイトでも良いぞ。
0199uy ◆Qawu9.2l1E
垢版 |
2015/12/22(火) 23:43:59.28ID:qcwFiUkP
>>197
なんか食パン裏返してこっちが表だとか必死に言ってるようなレスだな
レスを投稿する


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