【问题标题】:Who and When uses recursive code on Production Environment [closed]谁和何时在生产环境中使用递归代码 [关闭]
【发布时间】:2017-06-01 07:13:32
【问题描述】:

我有 2 年的 IT 经验。我还没有看到任何递归代码。我想知道是否有任何公司或组织在其生产环境中使用递归代码。如果有些人也能解释用例,那就太好了。

【问题讨论】:

  • 嗯...如果你在 lisp 或 scheme 中开发,如果你不能使用递归,你会被搞砸的。
  • 如果 Web 开发人员从未在生产环境中看到 C++ 代码,这并不意味着没有使用 C++。 IT 是一个如此广阔的领域,您几乎可以找到任何范式的合法用途
  • @bolov 因为递归总是可以被迭代代替,任何包含“必须使用递归”的句子(在递归调用函数的意义上)是根本错误的(抱歉这么苛刻;-)) .也就是说,确实可以使用递归函数很好地处理许多递归数据结构。但就 stackoverflow 而言,迭代通常更快且风险更低。
  • @PeterA.Schneider 我完全同意。

标签: optimization


【解决方案1】:

所有使用可变参数模板的代码都必须使用递归,参见例如http://kevinushey.github.io/blog/2016/01/27/introduction-to-c++-variadic-templates/.

this question 的答案给出了一些递归示例。最有说服力的一个是手动编码的编译器(或者更确切地说是解析器)实现,用于递归定义的语言(如 C 和大多数其他语言,其中块可以包含块、表达式等)。也许这对我来说最有说服力,因为我在 CS 课程中做到了,但仍然如此。即使在这里,生产编译器也有可能是用工具创建的并且不是递归的。如果有人阐明 gcc 或其他开源编译器之一的内部工作原理,我将不胜感激。

我通常会假设一些处理递归数据结构的程序具有有限的递归深度(如平衡树,而不是普通树或列表)使用递归,只是因为它简单而优雅,并且深度限制消除了最大的递归的障碍。

想一想,我实际上已经使用递归来为一个内部定制程序解析一个简单的“选项语言”,该程序有一个选项-eval <file>,其中引用的文件包含更多选项,可能包括更多@987654324 @s。引用的文件确实只是简单地递归评估。

【讨论】:

  • 你头像的分形很可能是递归生成的。
  • @bolov 实际上,如果我没记错的话,虽然数学是递归的(步骤 n 的输出用作步骤 n+1 的输入),但我的实现是迭代的。原因是需要数万次迭代才能获得结果。
  • 嗯……这不是生产环境,不算数! (开玩笑的:)))
【解决方案2】:

如果程序基本上是与某种数据库接口的 CRUD(创建、检索、更新、删除)屏幕,那么您将不会看到太多的递归调用。这是很多严肃的、真实的编程。

但是大量程序都有树。例如。艺术品树或 3D 动画对象树。使用树后,递归是迄今为止解决问题的最简单方法。

还有用递归代替迭代的“函数式编程”范式。它有一些理论上的好处,并在某些环境中使用,尽管它仍然有点学术和实验性。

【讨论】:

  • 函数式编程最近受到很多关注,因为它与并行执行非常吻合(共享数据较少)。
【解决方案3】:

为了您的信息,我早先进入了一家 IT 公司,我曾经在生产环境中编写大量递归代码。如果你愿意的话,更多的取决于编码器我可以发送一些递归代码示例

【讨论】:

  • 我不需要例子。我只是好奇,在什么情况下有人需要使用递归而不是任何替代方法。
  • @sbmc7 你真的问“我想知道是否有任何公司或组织使用递归代码”,smn 说“是的,我们做到了!”。这清楚地准确回答了这个问题。如果您不喜欢这个答案,您可能想将您的问题改写为“在什么情况下 [does] 有人需要使用递归而不是任何替代方法”,这是一个更有趣的问题,因为绝对不可能没有公司使用过递归。 (顺便说一句,替代方法不多,是吗?只有一种。)
  • @sbmc7 让我给你举个例子,我们有一个场景,比如我们有一个进程 proc1,它在进程 2 完成之前无法运行,所以我做了一个技巧,我写了 1 个我写的主进程1 IF else 语句,例如如果进程 2 成功运行,那么只有进程 1 得到它的插槽来运行,否则它需要睡眠 2 分钟并再次调用自己。希望你现在清楚一点。
  • @smn_onrocks 是的!我明白了。
猜你喜欢
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 2016-04-23
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多