(defn rec-map-mult [n M] (reduce (fn [M [k v]] (let [new-v (cond (map? v) (rec-map-mult n v) (number? v) (* n v) :else 0)] (if (or (= new-v {}) (and (number? new-v) (zero? new-v))) M (assoc M k new-v)))) {} M)) #'user/rec-map-mult user=> (rec-map-mult 3 { :a 3 :b {:c 7 :d 9} }) {:b {:d 27, :c 21}, :a 9}
Other options:
a civilized version of the same function