(defn factorial [n fact]
(if <= n 1)
fact
(factorial (- n 1) (* n fact)))
(defn fact [n]
(factorial (n 1)))
答案 0 :(得分:3)
看起来您正在尝试使用参数来编写因子来携带总数,但是您的括号不太正确。
head(table(cut(x, breaks = c(-Inf, seq(0, 1442, by = 53.25)))))
# (-Inf,0] (0,53.2] (53.2,106] (106,160] (160,213] (213,266]
# 1652 1 6 1 34 6
因为n是列表中的第一项,所以它被称为函数。但作为一个数字,它不能以这种方式使用。
要调用阶乘函数(n为输入,1为初始总和),您可能意味着
(factorial (n 1))
您的阶乘功能还有其他问题。
(defn fact [n]
(factorial n 1))
(if <= n 1)
是一个函数,因此在用作if
<=
对factorial的递归调用几乎就是你想要的解决方案,但是有一些不匹配的括号,这就是你的意思
(if (<= n 1)
...
然而,可以使用一些正确/惯用的clojure俚语,这是一个更好的方法来完成你的完整解决方案
(defn factorial [n fact]
(if (<= n 1)
fact
(factorial (- n 1) (* n fact))))
虽然,如果你使用调用堆栈来携带总数,你可以做得更好
(defn factorial [n total]
(if (<= n 1)
total
(recur (dec n) (* n total))))
(defn fact [n]
(factorial n 1))
您可以稍微重新调整一下以使用(defn factorial [n]
(if (<= n 1)
1
(* n (factorial (dec n)))))
,这会给您带来稍微好一点的表现,但我认为这是一个学术练习,您可以查看其他答案(例如Alan Thompson's answer )。
答案 1 :(得分:0)
在这个问题中,您可以看到2个示例解决使用递归与循环/重复相关的阶乘问题: