Collatz 予想 (キミならどう書く 2.0 - ROUND 2 -)

時間ができたので考えてみた。そのまま素直に書いてみた。

#!/usr/bin/env gosh

(define (g n)
  (define (f n step)
    (cond ((= n 1) step)
          ((even? n) (f (/ n 2) (+ step 1)))
          ((odd? n) (f (+ (* n 3) 1) (+ step 1)))))
  (f n 1))

(define (h n)
  (let loop ((i 1)
             (k 1)
             (m 1))
    (if (< n i)
        (values k m)
        (let ((s (g i)))
          (if (<= m s)
              (loop (+ i 1) i s)
              (loop (+ i 1) k m))))))

実行結果。

gosh> (h 100)
97
119

n = 97 のときステップ数 119 で最大。