博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

斐波那契两种算法(递归,迭代规划)

Posted on 2013-02-19 13:46  对镜弹箜篌  阅读(298)  评论(1编辑  收藏  举报
 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))))