Open
Description
A solução proposta pela @anabastos está com o square no local errado:
(defn square [x] (* x x))
(defn expt [b n a]
(cond (= n 0) a
(even? n) (square (expt b (/ n 2) a)) ;; square no local errado
:else (expt b (- n 1) (* b a))))
Na segunda cláusula, deveria ser:
(defn square [x] (* x x))
(defn expt [b n a]
(cond (= n 0) a
(even? n) (expt (square b) (/ n 2) a) ;; linha modificada
:else (expt b (- n 1) (* b a))))
Pode-se verificar mostrando as respostas:
(println (expt 3 6 1))
(println (expt 2 10 1))
(println (expt 5 2 1))
(println (expt 5 3 1))
Também verificando como é computado o estado para uma operação como expt(3, 6, 1)
b=3 n=6 a=1
b=9 n=3 a=1
b=9 n=2 a=9
b=81 n=1 a=9
b=81 n=0 a=729
Metadata
Metadata
Assignees
Labels
No labels