我将用Python描述我想做什么(我想在Clojure中写这个).我有这个功能:
def f(n):
s=0
for d in range(1,n+1):
s+=d*(n//d)
return(s)
Run Code Online (Sandbox Code Playgroud)
这基本上是从d = 1到n包含循环,并且总结了d/d的最低值的d倍的值.
在Clojure中我想让它成为一个递归函数.Python等价物:
def f(d, n):
if d == 0: return 0
else: return d*(n//d) + f(d-1, n)
Run Code Online (Sandbox Code Playgroud)
然后我会调用函数f(n, n).
我在尝试这个:
(defn f
([n] (f n n))
([d n]
(if (> d 0)
(recur (dec d) n)
0)))
Run Code Online (Sandbox Code Playgroud)
但是我不知道到目前为止这是否正确,或者在总和或者如何做到这一点等等.