Fibonacci數---scheme表示

;;; three implementation of fibonacci number

; recusive style of fibonacci number
(define (fib1 n)
  (if (< n 3)
      1
      (+ (fib (- n 1))
         (fib (- n 2)))))

; C style iteration of fibonacci number
(define (fib2 n)
  (let ((n1 1)(n2 1)(tmp 0)(i 2))
    (while (< i n)
           (set! tmp (+ n1 n2))
           (set! n1 n2)
           (set! n2 tmp)
           (set! i (+ i 1)))
    n2))

; lisp style iteration of fibonacci 
; scheme do tail recursion optimizatiion in default
; this will run equally fast as fib2
(define fib3
    (lambda (n)
        (let t ((a 0) (b 1) (i 0))
            (if (= i n)
                b
                (t b (+ a b) (+ i 1))))))
(display "fib run//res = ")
(time (fib1 80))                                    ; test excution time of (fib1 80), last long time

(display "fib2 run//res =")
(time (fib2 80))

(display "fib3 run//res =")
(time (fib3 80))
(fib 111)                                           ; 70492524767089125814114



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章