【发布时间】:2018-11-26 08:10:46
【问题描述】:
我目前正在处理 kata 代码挑战,它有一些要求:
- u(0) = 1 是 u 中的第一个。
- 对于 u 中的每个 x,y = 2 * x + 1 和 z = 3 * x + 1 也必须在 u 中。
- u 中没有其他数字。
我已经构建了几个函数:
(defn test2 [x n orgN] ;;x is a counter, n is what I want returned as a list
(println n)
(println "this is x: " x)
(cons n (if (not= x (- orgN 1 ))
(do (test2 (+ x 1) (+ 1 (* n 2)) orgN)
(test2 (+ x 1) (+ 1 (* n 3)) orgN))
nil)
))
(defn test2helper [n]
(def x 1)
(test2 x x n)
)
(test2helper 5)
但是,这只会返回 (1 4 13 40) 并且错过了介于两者之间的一大堆值。缺点只是基于最后一个 3n+1 算法构建一个列表,而不是在我想要的时候选择任何其他值,而不是从每个重复的 n 值生成的两个值的序列。我的问题是有没有办法构建所有值的序列而不是其中的 4 个?
【问题讨论】:
-
我们不在这里解决家庭作业和练习,肖恩。请参阅 Clojure 编程教程。
-
或者,将问题分解为代码行为中您不理解的部分并提出具体问题。在此过程中,您可能会找到构造函数的正确方法。
-
@Carcigenicate 很难看出
iterate在这里会有什么用处。该算法本质上是递归的,显然不能迭代。 -
@amalloy 是的,我试着把它写出来,然后意识到我误解了这个问题。我的意思是删除那条评论。
-
也许你应该用你以后的问题创建一个新问题,而不是编辑问题
标签: clojure