关于无循环(功能性)编程语言的讨论很多,但是我还没有听说过任何现代的无递归编程语言。我知道COBOL不(或不)支持递归,而且我想对于FORTRAN也是一样(或者至少它们会有奇怪的行为),但是有没有现代语言?
有几个原因让我对此感到疑惑...
- 据我了解,没有一种递归算法不存在至少与性能相同的迭代实现(因为在循环中管理堆栈时,您可以简单地“模拟”递归)。因此,使用递归不会带来a)性能提升和b)功能的提升。
- 对于斐波那契数的朴素,递归实现,递归的性能可能比迭代更差。人们喜欢指出,当优化编译器并涉及尾递归时,递归可以同样快,但是根据我的理解,尾递归算法总是很容易转换为循环。因此,c)递归可能会导致性能损失。
- 学术界似乎有一个递归的东西,但是话又说回来,大多数人不能/根本不编写任何有效的代码。 C ++(或一般而言,面向对象)是生动的证据,证明学术思想如何进入商业世界/公司,而绝大部分都不切实际。我想知道递归仅仅是这的另一个例子。 (我知道这是一个自以为是的话题,但是我听到的大多数熟练的软件工程师至少在某种程度上都同意这一观点。)
- 我以前曾在生产系统中编写过递归算法,但我想不起来我真的从中受益于使用递归的时候了。在某些情况下,递归算法d)可能会或可能不会提供代码可读性的优势。我对此不确定...
- 大多数(全部?)现代操作系统都依赖于指定的调用堆栈约定。因此,如果要从程序中调用任何外部库,则编程语言/编译器必须遵守系统的调用堆栈约定。这使得对编程语言/编译器采用递归很容易。但是,如果您要创建无递归语言,则根本不需要调用堆栈,这将在内存管理方面产生有趣的效果...
所以我不讨厌递归...我只是想知道最近是否进行了无递归的语言实验,结果如何,对我来说似乎是一个实际的实验?>