Javaっぽく書くこんなフィボナッチ。
int fib(int n){ int pre = 0; int result = 1; for(int i = n; i != 0; --i){ int tmp = result; result = result + pre; pre = tmp; } return result; }
変数はすべて引数として定義する
(define (fib-iter pre result i) )
初期値を設定
(define (fib n) (fib-iter 0 1 n)) ; pre = 0, result = 1, i = n (define (fib-iter pre result i) )
ループ条件のifをつける
(define (fib n) (fib-iter 0 1 n)) (define (fib-iter pre result i) (if (= i 0) x x))
成り立ったときは結果を返してループを終わり、成り立たなかったときは自分自身を呼び出してループを続ける
(define (fib n) (fib-iter 0 1 n)) (define (fib-iter pre result i) (if (= i 0) result (fib-iter x x x)))
変数への代入を関数呼び出しの引数に置き換える
(define (fib n) (fib-iter 0 1 n)) (define (fib-iter pre result i) (if (= i 0) result (fib-iter result ; pre = result (+ pre result) ; result = pre + result (- i 1) ; i = i - 1 )))