下面是一个递归函数:递归函数失败断言
(defn make-control-data [it alphabet]
{:pre [(integer? it) (pos? it)]}
(let [shuffled-alphabet-string (reduce str (shuffle alphabet))]
(if (zero? it)
shuffled-alphabet-string
(str shuffled-alphabet-string (make-control-data (dec it) alphabet)))))
应该采取的整数(it
),指定数目的递归调用和字母串列表,例如,["a" "b"]
。它应该使用字母表中的所有字母返回一个长度为it*length(alphabet)
的随机排序字符串。如果it = 2
和字母表= ["a" "b"]
该函数应产生一个长度为(* 2 (count ["a" "b"])) = 4
的随机字符串,使用字母表中的所有字母["a" "b"]
。
它打破了前提条件(pos? it)
,并返回一个长度为(it+1)*length(alphabet)
的字符串。
任何人都可以看到有什么问题吗?
建议使用高阶函数而不是显式递归,如@amalloy – Ankur