タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

末尾再帰に関するkoki-hのブックマーク (2)

  • Rubyで末尾再帰最適化をする。 - Homoiconic Days

    元ネタはPythonで末尾再帰最適化をする。 - wasabizの日記。Pythonのデコレータを使って、末尾再帰で書かれた関数に対して末尾呼び出し最適化(TCO)を行う、というものです(どうやってTCOを実現しているかの詳細についての説明はここでは割愛します)。 さて、元エントリでは「Pythonがすごいからこんなことができるんだ」という感じで書かれていますが、タネさえ分かればいろんな言語でできそうだということが分かったので、他の言語でも試してみることにしました。 まずはじめに、試しにScheme版を書いてみたものの、そもそもSchemeはTCOを勝手にやってくれるのであまり意味のない例になってしまいました。 その後、Scheme版をだいたいそのままRubyに書き直したのが以下のRuby版です。 class Module def tco(name) continue = [] first

    Rubyで末尾再帰最適化をする。 - Homoiconic Days
  • 再帰は再帰なんかじゃない!末尾再帰こそが真の再帰なんだ! - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 再帰は再帰なんかじゃない!末尾再帰こそが真の再帰なんだ! : melborne.github.com - 「計算機プログラムの構造と解釈」で 末尾再帰というものを知ったので勉強しました 自分の理解を書いてみます 再帰 再帰呼び出しとはある手続きの中で 再びその手続き自身を呼び出すことと定義される*1 でもこの定義は正確じゃない なぜなら再帰呼び出しは自分自身を呼んでいないからだ 階乗を考えてみよう 階乗は数学的にこう定義できる 但し、自然数n=1のときは1 ふつうRubyで階乗メソッドはこう書く def fact(n) if n == 1 1 else n * fact(n-1) end end fact 5 #> 120 factメソッドの中でfactメソッド

    再帰は再帰なんかじゃない!末尾再帰こそが真の再帰なんだ! - hp12c
  • 1