(define (chainlen n) (define (next m) (if (even? m) (/ m 2) (+ (* m 3) 1))) (define (count-iter cur cnt) (if (= cur 1) cnt (count-iter (next cur) (+ cnt 1)))) (count-iter n 1)) (define (find-max-len-start limit) (define (try cur longest ans) (cond ((> cur limit) ans) ((= (remainder (- cur 4) 6) 0) ;it's even and is 3n+1=>it's 6n+4 (try (+ cur 1) longest ans)) (else (let ((len (chainlen cur)) (curn (+ cur 1))) (if (> len longest) (try curn len cur) (try curn longest ans)))))) (let ((lowest (ceiling (/ limit 2)))) (try lowest 1 lowest))) (display (find-max-len-start 999999)) (newline)