交替递归解fibs数列(线性复杂度)

来源:互联网 发布:java cp 命令参数 编辑:程序博客网 时间:2024/05/16 07:07
交替递归解fibs数列(线性复杂度)
(defun  fibs_help (lst)
(cons  (cons  (+ (caar lst)
                 (cadar lst))
              (list (caar lst)))
       (list (car lst))))


(defun  fibs (labelA labelB)
(if  (eq  labelB  1)
       '((1 1)  (1 0))
      (fibs_help 
               (fibs  labelB  
                      (1-  labelB))))) 
(defun  value (lst)
(caar lst))


(defun  fibsex (n)
(if  (eq  n  1)
          1
    (if  (eq  n  2)
           1
     (+  (fibsex  (-  n  1))
         (fibsex  (-  n  2))))))
         


(defun  test (n)
(if  (>  n  1)
  (progn 
       (print (value (fibs n (1- n))))
       (print  'compare)
       (print (fibsex  n))
       (test (- n 1)))
  (print 'over))) 


[42]> (test  15)


610
COMPARE
610
377
COMPARE
377
233
COMPARE
233
144
COMPARE
144
89
COMPARE
89
55
COMPARE
55
34
COMPARE
34
21
COMPARE
21
13
COMPARE
13
8
COMPARE
8
5
COMPARE
5
3
COMPARE
3
2
COMPARE
2
1
COMPARE
1
OVER
OVER
可以看到两者的结果是一样的,在做压力测试的时候比如40的时候,改进方法能很快出结果,而原来的需要很长很长的时间;
原创粉丝点击