1 function Fib1(x: integer): integer; 2 var 3 temp: integer; 4 begin 5 if x = 0 then 6 Result := 0 7 else if x = 1 then 8 Result := 1 9 else 10 Result := Fib1(x - 1) + Fib1(x - 2); 11 end;
1 function fib_iter(x, y, z: integer): integer; 2 begin 3 if z = 0 then 4 Result := y 5 else 6 Result := fib_iter(x + y, x, z - 1); 7 8 end; 9 10 function fib2(x: integer): integer; 11 begin 12 Result:= fib_iter(1,0,x); 13 end;
//第二种方法效率高
//出自SICP
(define (fib1 x) (cond ((= x 0) 0) ((= x 1) 1) (else (+ (fib1 (- x 1)) (fib1 (- x 2)))))) (define (fib2 x) (fib-iter 1 0 x)) (define (fib-iter a b count) (if (= count 0) b (fib-iter (+ a b) a (- count 1))))