关于方法递归调用
Java的递归和c语言有很多相似之处
1.什么是递归
方法自身调用自身
2.递归很耗费栈内存,如需必要,可避免使用递归
3.以下程序运行的时候发生了这样的一个错误【不是异常,是错误Error】:java. lang. stackoverflowErrorI
栈内存溢出错误
错误发生无法挽回,只有一个结果,就是JVM停止工作。
首先我们试一下用普通的算法来求
结果为
我们用递归的办法试试
结果相同
关于栈
在jvm中,存在内存空间,最主要的内存空间有三块:堆内存空间,方法区内存空间,栈内存空间。
其中栈内存空间,这个内存空间存入和取出数据遵循先进后出(后进先出)。是栈的特性。
栈是一种数据结构(stack),栈是一种先进后出(FILO),或者是说后进先出(LIFO)的数据结构。也就是说数据存入栈中,先存入的只能是最后才能取到。最后存入的,最先被取到。栈只有一个入口,超出了之后,就会溢出
分析一下上述代码的栈内存如下
从下往上
main方法入栈,把5传给sum的变量
n从5开始依次递减
一直到n等于1时,到达栈顶
jvm只执行栈顶的方法
运行完后,弹栈
sum开始弹栈并将结果返回上一次
即sum=n+1
注意:方法在栈中执行,方法中的局部变量在栈中分配空间。方法运行完毕后,出栈,该方法所使用到的栈内存空间都会释放。
更多详细请移步https://www.bilibili.com/video/BV1Rx411876f?p=105
/*
嗷嗷
睡觉睡觉
*/