タグ

再帰に関するrin51のブックマーク (4)

  • 再帰とジェネレータ

    back [English] 概要: ある種の問題は、再帰を使うと非常に効率的に記述できる。 しかし大量のデータを生成するような再帰的手続きは厳密に制御する必要があり、 そういったプログラミングは難しい。Python 2.2 以降から使用可能になった ジェネレータを使うと、簡潔なコードを維持しつつ、 こうした手続きをかんたんに制御することができる。 この文書で使われているソースコードは こちら。 プレインテキスト版は こちら。 はじめに 再帰は非常に強力なメカニズムです。 時にこれは混乱を招くこともありますが、ふつう再帰を使うと、問題を簡単に記述することができます。 ある手続きが扱うデータ量が指数的に増えるような場合、これはとくにあてはまります。 木構造の探索がいい例でしょう。木の各節点はひとつ以上の子を持っていますが、 下へ下へとたどっていくにつれて、節点の数は指数的に増えていきます。

  • 時間城年代記:PythonによるYコンビネータの仕組みの(多分)わかりやすい説明

    lambdaを使っててどうも気になるのが、ループ(再帰)するために一時的に関数に名前をつけなければならないところだ。 一時的なローカル変数が簡単に設定できる言語ならともかく、Pythonではそれも結構面倒だ。 ところが、つらつらとネットを探していくと、妙なモノを発見。 『Yコンビネータ(Y combinator)』とか『不動点コンビネータ (fixed point combinator)』あるいは『不動点演算子』とか呼ばれるモノで、コレを使うと、どうやら関数に名前を付けなくとも再帰できるという代物らしい。 喜びいさんで見てみたが……書けはしたものの、理解するのに苦労した。 今回はその解説を、私のようにλ表記になじみの無い人でもわかるように、基的に一般の関数式とPython式で書いてみることにした。 さらに、同じ式を2回書いて、次にドコにドコを適用させるかを色分けし、その結果も色分けして書

  • gist: 289467 - GitHub

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

    rin51
    rin51 2010/01/31
    EXPERT PROGRAMMERフイタ
  • 1