反復プロセス練習!!練習!!練習!!

コツとしては「再帰式を積み上げる」感じで書くとうまくいくことが多いみたいです。問題はSICPとか数学の有名な漸化式の問題から拝借しました。

階乗計算

階乗を計算する手続きを、反復プロセスで定義せよ。再帰プロセス版は以下の通り。

(define (fact-recur n)
  (if (= n 1)
	  1
	  (* n (fact-recur (- n 1)))))

ハノイの塔

ハノイの塔問題を最小手数で解く漸化式を反復プロセスで定義せよ。再帰プロセスは以下の通り。

(define (hanoi n)
  (if (= n 0)
	  0
	  (+ (* 2 (hanoi (- n 1))) 1)))

フィボナッチ数を求める問題

フィボナッチ数を計算する関数を、繰り返し(iteration)をつかって定義しなさい。再帰版は次の通り。

(define (fib n)
  (cond
   ((= n 1) 1)
   ((= n 2) 1)
   (else (+ (fib (- n 1))(fib (- n 2))))))
404 Blog Not Found:Recursion vs. Iteration
続きを読む