【发布时间】:2011-11-07 03:45:33
【问题描述】:
以下是递归函数:
(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"] 函数应该使用字母表 ["a" "b"] 中的所有字母生成长度为 (* 2 (count ["a" "b"])) = 4 的随机字符串。
它打破了前置条件(pos? it),返回一个长度为(it+1)*length(alphabet)的字符串。
谁能看出有什么问题?
【问题讨论】:
-
建议使用高阶函数而不是显式递归,如@amalloy 的答案所示
标签: string random recursion clojure