Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

11. ループと再帰

各々の行の値が行番号の自乗であるような場合に、triangle 関数と同様な関数を書きなさい。ただし、while ループを使うこと。

(defun triangle2 (number-of-rows)
  (let ((total 0)
        (row-number 1))
    (while (<= row-number number-of-rows)
      (setq total (+ total (* row-number row-number)))
      (setq row-number (1+ row-number)))
    total))

triangle 関数と同様だが、各々の行の値を足すのでは無く、掛けていくような関数を書きなさい。

(defun triangle_multiply (number-of-rows)
  (let ((total 1)
        (row-number 1))
    (while (<= row-number number-of-rows)
      (setq total (* total row-number))
      (setq row-number (1+ row-number)))
    total))

上の二つの関数を再帰的な関数に書き直しなさい。また、cond を使って書き直しなさい。

triangle2のみ書き直しました。

(defun triangle_2_recursively (number-of-rows)
  (cond ((= number-of-rows 1) 1)
	(t 
	 (+ (* number-of-rows number-of-rows)
	    (triangle_2_recursively (1- number-of-rows))))))