47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Racket
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Racket
		
	
	
	
	
	
#lang racket
 | 
						|
 | 
						|
;; for n=100
 | 
						|
;; iterative version takes roughly 0.008 milliseconds.
 | 
						|
;; recursive version does not seem like it will finish any time soon.
 | 
						|
;; for n=50
 | 
						|
;; iterative version takes roughly 0.003 milliseconds in drracket
 | 
						|
;; recursive version has not yet finished executing after a couple minutes, and I got bored.
 | 
						|
;; for n=25.
 | 
						|
;; iterative version takes 0.002ms
 | 
						|
;; recursive version takes 46.5 ms
 | 
						|
;; yeah. that's big. okay. this shit's important.
 | 
						|
;; I wonder how it would be with memoization.
 | 
						|
 | 
						|
 | 
						|
(define-syntax-rule (meas form)
 | 
						|
  (let ([my-time (real-time)])
 | 
						|
    (let ([res form])
 | 
						|
      (- (real-time) my-time))))
 | 
						|
 | 
						|
 | 
						|
(define (recursive n)
 | 
						|
    (if (< n 3)
 | 
						|
        n
 | 
						|
        (+ (recursive (- n 1))
 | 
						|
           (* 2 (recursive (- n 2)))
 | 
						|
           (* 3 (recursive (- n 3))))))
 | 
						|
(define (iter a b c n)
 | 
						|
  (if (<= n 0)
 | 
						|
      c
 | 
						|
      (iter b c (+ c (* 2 b) (* 3 a)) (- n 1))))
 | 
						|
(define (iter-start n)
 | 
						|
  (iter 0 1 2 (- n 2)))
 | 
						|
 | 
						|
;; note, as the book says,
 | 
						|
;; this generates an *iterative process*, despite being
 | 
						|
;; fully recursive
 | 
						|
(define (ex-1-11 n)
 | 
						|
  (let loop ((i n))
 | 
						|
    (if (< i 2)
 | 
						|
        #t
 | 
						|
        (if (= (recursive i) (iter-start i))
 | 
						|
            (loop (- i 1))
 | 
						|
            (begin 
 | 
						|
              (display "UNEQUAL!")
 | 
						|
              (displayln i))))))
 |