Clojure - La Recurrència amb Trampolí W83336


Statement
 

pdf   zip

thehtml

Es pot demostrar que la recurrència un+2=5 × un+1 − 6 × un, amb u0 = 0 i u1 = 1 és tal que per a tot n, un = 3n − 2n.

L’estudiant que no ho sap, però vol conèixer el valor d’un per a qualsevol n, podria ser tan ingenu d’implementar la següent funció d’una manera molt ineficient, fent servir la definició matemàtica:

(defn recurrencia [n]
   (cond
      (or (= n 0)  (= n 1))   n
      :else (let [rm1   (recurrencia (dec n))
                  rm2   (recurrencia (dec (dec n)))]
              (-' (*' 5 rm1) (*' 6 rm2)))))

Passeu aquesta funció a continuation passing style per obtenir-ne la versió recursiva final. Anomeneu-la recurrencia-cps.

Després, trampolinitzeu recurrencia-cps per evitar d’obtenir l’error de Stack Overflow. Anomeneu-la recurrencia-t.

Observacions

Cal que envieu un fitxer amb la definició de les dues funcions recurrencia-cps i recurrencia-t.

Public test cases
  • Input

    (recurrencia-cps 5 identity)
    (recurrencia-cps 10 identity)
    (recurrencia-cps 15 identity)
    (recurrencia-t 5)
    (recurrencia-t 10)
    (recurrencia-t 15)
    (recurrencia-t 20)
    

    Output

    211
    58025
    14316139
    211
    58025
    14316139
    3485735825
    
  • Information
    Author
    Jordi Delgado
    Language
    Catalan
    Official solutions
    Clojure
    User solutions
    Clojure