うっかりする人がいるかもしれませんが、 数列というのは、変数が自然数 (あるいは整数) である関数です。
次の例では、
で定義される Fibonacci 数列を 第 100 項まで表示しています。
a[0]=1;a[1]=1 a[n_]:=a[n]=a[n-1]+a[n-2] ここまで (2行) が関数定義 a[10] a[10] を計算して結果を表示 ??a a の中身を見る Table[a[n],{n,100}] a[1],...,a[100] を表示 |
(細かい工夫ですが…) 2行目は、 単に a[n_]:=a[n-1]+a[n-2] としても正しく計算する関数になりますが、 計算の効率が非常に低いです。 a[n_]:=a[n]=a[n-1]+a[n-2]] とすることによって、 計算結果を記憶しておくと、効率が向上します。
a[-1] を計算させようとすると、 以前のMathematicaでは暴走しました。
最近では滅多に暴走しなくなりましたが、 万一暴走させた (あるいは計算がなかなか終らない) 場合は、 [評価] → [評価を放棄(A)] で強制終了 (英語では [Kernel]→[Abort Evaluation(A)])
この例では、遅延評価 := を使うことが必須である (a[n_]=a[n]=a[n-1]+a[n-2] は通らないし、 a[n_]=a[n-1]+a[n-2] では遅くて使い物にならない)。
また、(当然のことであるが) 0以上の整数でないものを引数に与えると (暴走はしなくなったが) 再起呼び出しが止まらず、 エラーになる。
桂田 祐史