Java 1~N的和(递归&栈)

关于方法递归调用

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

/*
嗷嗷
睡觉睡觉
*/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值