循环/递归和递归之间有什么区别?

救援创意

我在Clojure文档中找不到答案。我是Clojure的新手,似乎您可以recur两种不同的方式使用并且基本上得到相同的结果。

范例1:

(defn my-function [num]
  (if (> num 10)
    num
    (recur (+ num 1))))

范例2:

(defn my-function [num]
  (loop [cnt num]
    (if (> cnt 10)
      cnt
      (recur (+ cnt 1)))))

据我所知,这两种形式似乎做的完全相同。我知道recur总体上讲,这样做的原因是好的,因为在正确的情况下,编译器可以共同破解某种伪尾部调用优化程序,我非常喜欢并且希望尽可能多地利用它。所以这是我的问题:

  1. loop如果recur没有它似乎什么也可以使用
  2. 是否loop仅创建“递归范围”,就像let创建迷你范围一样?
  3. 如果是这样,我仍然可以不使用而获得尾递归收益loop吗?
塞尔克斯

只是一个接一个地回答您的问题:

  1. loop允许您接受并传递任意参数。没有loop您,您将只能只接受函数接受的内容。这会导致堆很小的辅助功能

  2. 是的,有点

  3. 它必须是一个尾部调用,并且受编译器的约束

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无限循环和无限递归调用之间有什么区别?

来自分类Dev

迭代和递归之间有什么区别?

来自分类Dev

递归和递归可枚举语言有什么区别

来自分类Dev

dirct乘法与rust递归之间有什么区别

来自分类Dev

“递归”,“碰巧引用自己的非终止过程”和“重复计划”之间有什么区别?

来自分类Dev

递归-此BST有什么区别?

来自分类Dev

递归依赖性检查和反向依赖性检查之间有什么区别?

来自分类Dev

递归依赖性检查和反向依赖性检查之间有什么区别?

来自分类Dev

块和循环之间到底有什么区别?

来自分类Dev

这两个递归ocaml函数之间有什么区别?

来自分类Dev

返回函数调用与在递归期间仅再次调用函数之间有什么区别?

来自分类Dev

总参与和递归关系的表示法有什么区别?

来自分类Dev

总参与和递归关系的表示法有什么区别?

来自分类Dev

T(n)(递归关系),Big O和Big Theta有什么区别

来自分类Dev

这两个递归函数有什么区别?

来自分类Dev

这两种递归方法有什么区别

来自分类Dev

这两个递归函数有什么区别?

来自分类Dev

CoffeeScript,=>和->之间有什么区别

来自分类Dev

(for ... in)和(for ... of)语句之间有什么区别?

来自分类Dev

R和with之间有什么区别?

来自分类Dev

R和with之间有什么区别?

来自分类Dev

$ @和“ $ @”之间有什么区别吗?

来自分类Dev

Python:“ is”和“ ==”之间有什么区别?

来自分类Dev

“ ./”和“ ../”之间有什么区别?

来自分类Dev

not null和<>''之间有什么区别

来自分类Dev

之间有什么区别。和.data?

来自分类Dev

〜和/在路径之间有什么区别

来自分类Dev

线程和之间有什么区别

来自分类Dev

([])+ 和 []+ 之间有什么区别?

Related 相关文章

  1. 1

    无限循环和无限递归调用之间有什么区别?

  2. 2

    迭代和递归之间有什么区别?

  3. 3

    递归和递归可枚举语言有什么区别

  4. 4

    dirct乘法与rust递归之间有什么区别

  5. 5

    “递归”,“碰巧引用自己的非终止过程”和“重复计划”之间有什么区别?

  6. 6

    递归-此BST有什么区别?

  7. 7

    递归依赖性检查和反向依赖性检查之间有什么区别?

  8. 8

    递归依赖性检查和反向依赖性检查之间有什么区别?

  9. 9

    块和循环之间到底有什么区别?

  10. 10

    这两个递归ocaml函数之间有什么区别?

  11. 11

    返回函数调用与在递归期间仅再次调用函数之间有什么区别?

  12. 12

    总参与和递归关系的表示法有什么区别?

  13. 13

    总参与和递归关系的表示法有什么区别?

  14. 14

    T(n)(递归关系),Big O和Big Theta有什么区别

  15. 15

    这两个递归函数有什么区别?

  16. 16

    这两种递归方法有什么区别

  17. 17

    这两个递归函数有什么区别?

  18. 18

    CoffeeScript,=>和->之间有什么区别

  19. 19

    (for ... in)和(for ... of)语句之间有什么区别?

  20. 20

    R和with之间有什么区别?

  21. 21

    R和with之间有什么区别?

  22. 22

    $ @和“ $ @”之间有什么区别吗?

  23. 23

    Python:“ is”和“ ==”之间有什么区别?

  24. 24

    “ ./”和“ ../”之间有什么区别?

  25. 25

    not null和<>''之间有什么区别

  26. 26

    之间有什么区别。和.data?

  27. 27

    〜和/在路径之间有什么区别

  28. 28

    线程和之间有什么区别

  29. 29

    ([])+ 和 []+ 之间有什么区别?

热门标签

归档