FORTRAN 77是否支持堆栈功能,因为FORTRAN 77不支持递归?

时间:2018-08-13 09:52:15

标签: fortran fortran77

FORTRAN实现不允许递归,因为

a。他们使用静态分配变量

b。他们使用动态分配变量

c。堆栈并非在所有机器上都可用

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

关于它的矛盾a我理解是正确的,但是为什么ans c是错误的。时间堆栈可用于fortran,但即使fortran也不支持递归吗?谁能解释我。

1 个答案:

答案 0 :(得分: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个单词。不幸的是,记住了变量值,因此如果要使用动态变量,则必须创建自己的堆栈版本。