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 で最大。