問題をLispで解く
- ということで、Lispプログラムを書いてその数式をグラフ化してみたりした。
(defun factorial (n) (let ((i 1) (n-fac 1)) (loop (if (> i n) (return n-fac)) (setf n-fac (* i n-fac)) (setf i (+ i 1))))) (defun combination (n m) (/ (factorial n) (* (factorial (- n m)) (factorial m)))) (defun sigma (func low high) (defun sigma-iter (k sum) (if (> k high) sum (sigma-iter (+ k 1)(+ (funcall func k) sum)))) (sigma-iter low 0)) (defun q (m n) (defun q-iter (k) (* (expt -1 (- m k)) (combination m k) (expt (/ k 12) n))) (sigma 'q-iter 1 m))
階乗が再帰でないのは、マシンスペック上の問題です。
再帰で書くと、これを書いた当時の私のノートPCのCygwinのCommon Lispではスタックが溢れてしまうからなのでした。orz
あと少し漸化式を展開してます。
- さて、お待ちかね。