试图理解clojure斐波那契递归

坎南·拉莫西

我试图理解下面的程序,以在 Clojure 中使用递归查找斐波那契数列。

(defn fib
[x] 
(loop [i '(1 0)]
    (println i)
    (if (= x (count i))
        (reverse i)
        (recur 
          (conj i (apply + (take 2 i))))))) // This line is not clear

对于前电话,fib(4)我得到以下输出,

(1 0)
(1 1 0)
(2 1 1 0)
(0 1 1 2)

根据我的推断,这conj似乎将 的值添加(apply + (take 2 i))i. 但这不是 的行为conj有人可以帮助我了解这究竟是如何工作的吗?

致癌物

就是conj, 对于列表的行为conj并不总是添加到最后:

(conj '(1) 2) ; '(2 1)

(conj [1] 2) ; [1 2]

添加元素的位置取决于集合的类型。由于添加到列表的末尾很昂贵,因此conj改为添加到前面。这是相同的操作(添加到列表),但针对正在使用的集合进行了优化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

斐波那契递归?

来自分类Dev

NASM大会递归斐波那契

来自分类Dev

递归斐波那契代码

来自分类Dev

斐波那契数列的跟踪递归

来自分类Dev

尾递归斐波那契

来自分类Dev

使用递归的JavaScript斐波那契

来自分类Dev

NASM大会递归斐波那契

来自分类Dev

递归关系-斐波那契

来自分类Dev

递归和斐波那契数列

来自分类Dev

MIPS斐波那契使用递归

来自分类Dev

斐波那契函数的递归实现

来自分类Dev

计划中斐波那契尾递归的解释?

来自分类Dev

斐波那契递归函数需要永远

来自分类Dev

使用斐波那契递归打印1到n

来自分类Dev

如何递归生成斐波那契数列的数组?

来自分类Dev

记忆递归斐波那契(Y)中的大整数

来自分类Dev

使用递归在Lisp中生成斐波那契数列?

来自分类Dev

没有递归线性的斐波那契算法?

来自分类Dev

带有变体的递归斐波那契算法

来自分类Dev

使用递归MATLAB计算斐波那契数列之和

来自分类Dev

斐波那契递归红宝石说明

来自分类Dev

斐波那契错误:比较超过最大递归深度

来自分类Dev

Groovy递归斐波那契函数期间缺少MissingMethodException

来自分类Dev

尝试使用递归来解决斐波那契(javascript)

来自分类Dev

文本WebAssembly中的递归斐波那契

来自分类Dev

快速递归斐波那契函数

来自分类Dev

斐波那契序列递归语法错误

来自分类Dev

使用斐波那契数列的递归函数

来自分类Dev

递归找到斐波那契数的总和