首页 > 代码库 > Java版——递归

Java版——递归

1.Java堆栈和运行时堆栈是两个不同的概念:他们有相似点:在处理方法调用中所扮演的角色基本上是相同的,所以尽管存储的方式不同,却存储了进行这项处理的相似信息。Java解释器的任务是转换.class文件中的信息字节码,这样运行时堆栈可以接管Java堆栈(其仅仅是一个抽象构造)的工作。

2.每个方法的状态,包括main()方法,都是全部自动变量的内容、方法的参数以及返回地址(指出了重新返回器调用者的位置)描述的。包含所有这些信息的数据域在运行时堆栈中,称为活动记录或是栈结构。只要其中一个方法在执行,属于他的活动记录就存在。这个纪录是该方法的私有信息池,是存储正确执行该方法及返回该方法调用位置的必要信息仓库。活动记录的生存期通常很短,因为她们是在进入方法时动态分配的,并且在方法退出时动态收回的。

  一个活动记录通常包含以下信息:

    方法的所有参数的值,首单元地址;

    可以存在别处的局部(自动)变量,活动记录只包含了它们的描述符和指向其存储地址的指针;

    返回地址;

    一个动态链接;

    非void类型的方法的返回值。

3.递归:尾递归;非尾递归;间接递归;嵌套递归;过分递归(逻辑简单性和可读性是支持递归使用的基础。递归的代价是拖长了运行时间并且相对于非递归方法,它占用了更多的运行时堆栈空间,如果递归层次太深,那么运行会导致堆栈溢出并且程序会不正常结束,产生一个不可恢复的错误stackOverflowError)。

4.回溯

Java版——递归