Optimization 谁和何时在生产环境中使用递归代码

Optimization 谁和何时在生产环境中使用递归代码,optimization,Optimization,我有两年的IT经验。我没有看到任何递归代码。我想知道是否有任何公司或组织在其生产环境中使用递归代码。如果有人也能解释一下用例,那就太好了。供您参考,我早年在一家It公司工作,在那里我在生产环境中编写大量递归代码。更重要的是,这取决于编码者,如果你想要c,我可以发送一些递归代码示例所有使用可变模板的代码都必须使用递归,请参见示例 下面给出几个递归示例。最有说服力的一个是针对递归定义语言(如C和大多数其他语言,其中块可以包含块、表达式等)的手工编码编译器(或者更确切地说是解析器)实现。也许这对我来说

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

供您参考,我早年在一家It公司工作,在那里我在生产环境中编写大量递归代码。更重要的是,这取决于编码者,如果你想要c,我可以发送一些递归代码示例

所有使用可变模板的代码都必须使用递归,请参见示例

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

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


仔细想想,我实际上已经使用递归来解析一个内部定制程序的简单“选项语言”,该程序有一个选项
-eval
,其中引用的文件包含更多选项,可能包括更多的
-eval
。引用的文件实际上是简单的递归计算。

如果程序基本上是CRUD(创建、检索、更新、删除)屏幕,用于连接某种数据库,那么递归调用就不多了。这是很多严肃的、真实的编程

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


还有“函数式编程”范式,它用递归代替迭代。它有一些理论上的好处,并在某些环境中使用,尽管它仍然有点学术性和实验性。。。如果你在LISP或方案中开发,如果你不能使用递归,那么你会被拧得很紧。如果一个Web开发者在生产中从来没有看到C++代码,那就意味着不使用C++。这是一个如此大的领域,你几乎可以找到任何合法的用途paradigm@bolov因为递归总是可以被迭代所代替,任何包含“必须使用递归”(在递归调用函数的意义上)的句子都是根本错误的(抱歉这么苛刻;-)。也就是说,许多递归数据结构确实可以用递归函数完美地处理。但同样的事实是,迭代通常更快,风险更小。我完全同意。@PeterA.Schneider。我不需要示例。我只是好奇,在什么情况下,人们需要使用递归而不是任何替代方法。@sbmc7您直截了当地问“我想知道是否有任何公司或组织使用递归代码”,smn说“是的,我们使用了!”。这清楚地回答了这个问题。如果你不喜欢这个答案,你可能想把你的问题重新表述为“在什么情况下[是否]有人需要使用递归而不是任何替代方法”,这是一个更有趣的问题,因为绝对不可能没有公司使用递归。(顺便说一句,替代方法不多,是吗?只有一种。)@sbmc7让我给你一个例子,我们有一个场景,比如我们有一个进程proc1,它在进程2完成之前不能运行,所以我做了一个技巧,我写了一个主进程,在其中我写了一个IF-else语句,比如如果进程2成功运行,那么只有进程1得到了它的运行时间,否则它需要睡眠2分钟,然后再次调用自己。希望你现在明白一点。@smn\u onrocks是的!我明白了。你的化身的分形很可能是递归生成的。@bolov实际上,如果我没记错的话,当数学是递归的(步骤n的输出用作步骤n+1的输入)时,我的实现是迭代的。原因是要达到一个结果可能需要数万次迭代。。。这不是一个生产环境,也不算数!(只是开玩笑:))函数式编程最近得到了很多关注,因为它与并行执行很好地结合(共享数据较少)。