exercise-1.19-fibonacci-algorithm-log-n-with-transformation.rkt 615 B

1234567891011121314151617181920212223242526272829
  1. #lang racket
  2. (define (fib n)
  3. (fib-iter 1 0 0 1 n))
  4. (define (fib-iter a b p q count)
  5. (cond
  6. ((= count 0) b)
  7. ((even? count) (fib-iter
  8. a
  9. b
  10. (+ (* p p) (* q q))
  11. (+ (* 2 p q) (* q q))
  12. (/ count 2)))
  13. (else (fib-iter
  14. (+ (* b q) (* a q) (* a p))
  15. (+ (* b p) (* a q))
  16. p
  17. q
  18. (- count 1)))))
  19. ;; (+ (fib 9) (fib 10))
  20. ;; (fib 11)
  21. ;; (/ (fib 100) (fib 99))
  22. (define (calculate-without-printing n)
  23. (fib n)
  24. 'done)
  25. (time (calculate-without-printing 100000000))