(define log2_tail
(lambda (n)
(letrec ((log2 (lambda (n res)
(if (= n 1)
res
(log2 (quotient (+ n 1) 2) (+ 1 res))))))
(log2 n 0))))
(log2_tail 3)
上記のコードは、底が 2 の対数の整数部分を計算するスキームの末尾再帰コードです。(実際にはわかりません)しかし、引数 3 で実行すると、結果は 1 ではなく 2 になります。どうすれば解決できますか?