再帰的プロセスと反復的プロセス
無職の間にSICPも読んでみる。目標は焦らずしっかりと最後まで読む。
Scheme と C で再帰的プロセスと反復的プロセスの手続きをそれぞれ書く。
フィボナッチ数 : 再帰的プロセス
(define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2))))))
int fib(int n) { if (n == 0) return 0; else if (n == 1) return 1; else return fib(n - 1) + fib(n - 2); }
フィボナッチ数 : 反復的プロセス
(define (fib n) (define (fib-iter a b counter) (if (> counter n) b (fib-iter (+ a b) a (+ counter 1)))) (fib-iter 1 0 1))
int fib(int n) { int a, b, tmp; a = 1, b = 0; while (n--) { tmp = a; a += b; b = tmp; } return b; }
pow : 再帰的プロセス
(define (pow base n) (if (= n 0) 1 (* base (pow base (- n 1)))))
int pow(int base, int n) { if (n == 1) return base; else return base * pow(base, n - 1); }
pow : 反復的プロセス
(define (pow base n) (define (pow-iter x counter) (if (> counter n) x (pow-iter (* base x) (+ counter 1)))) (pow-iter 1 1))
int pow(int base, int n) { int x = 1; while (n--) x *= base; return x; }