堆栈设施是FORTRAN 77,因为FORTRAN 77不支持递归?

问题描述 投票:-4回答:1

FORTRAN实现不允许递归,因为

一个。他们对变量使用静态分配

湾他们使用动态分配变量

C。堆栈并非在所有计算机上都可用

d。不可能在所有机器上实现递归。

它是矛盾的,我理解是正确的,但为什么ans c是错的。是时间堆栈可用于fortran,但即使fortran不支持递归?任何人都可以解释我

fortran fortran77
1个回答
1
投票

这不是答案:评论太长了。

递归通常被认为是一件好事 - 大多数主流作品都不需要递归。即便在今天,在用C ++,Java和C#编写的大型系统中,你几乎不会遇到递归。我看到一些年轻的毕业生经历了巨大的痛苦只是为了在完全没必要时使用递归。

可以使用堆栈,但不必使用它。例如,在较旧的编译器(IBM,DEC,Data General,Prime)上,返回地址存储在例程之前或特定位置 - 将为每个例程分配一个字。因此,要从子程序返回,所需的只是跳转/转到为例程存储的地址。变量存储在一个单独的区域中,所以实际上没有理由使用堆栈,因为这种技术要快得多并且没有堆栈大小限制。

这种实现在PIC等现代微控制器上运行良好,PIC只有2级堆栈。

在Fortran 66天中,一些供应商通过要求用户指定递归的深度来实现递归。例如,我在Prime Fortran上使用的那个(大约1975年),我不是100%肯定语法,但代码看起来像

      RECURSIVE (20) FACTOR
      SUBROUTINE FACTOR(N)

这将为递归调用留下20个字。不幸的是,变量值被记住了,所以如果你想要动态变量,你必须创建自己的堆栈版本。

© www.soinside.com 2019 - 2024. All rights reserved.