Skip to content

Questão 1.16 #7

@luizf-s

Description

@luizf-s

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions