JAVA学习之方法递归

JAVA学习之方法递归

代码引出:

public class RecursionTest {
    public static void main(String[] args) {
        System.out.println("main begin");
        doSome();
        System.out.println("main over!");
    }

    public static void doSome() {
        System.out.println("doSome begin");
        doSome();
        System.out.println("doSome over!");

    }
}

IDEA出现以下错误警告:

Exception in thread "main" java.lang.StackOverflowError
	at java.base/java.nio.ByteBuffer.position(ByteBuffer.java:1309)
	at java.base/java.nio.ByteBuffer.position(ByteBuffer.java:266)
	at java.base/sun.nio.cs.UTF_8.updatePositions(UTF_8.java:80)
	at java.base/sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(UTF_8.java:509)
	at java.base/sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:564)
	at java.base/java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:585)
	at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:301)
	at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:290)
	at java.base/sun.nio.cs.StreamEncoder.write(StreamEncoder.java:131)
	at java.base/java.io.OutputStreamWriter.write(OutputStreamWriter.java:208)
	at java.base/java.io.BufferedWriter.flushBuffer(BufferedWriter.java:120)
	at java.base/java.io.PrintStream.writeln(PrintStream.java:722)
	at java.base/java.io.PrintStream.println(PrintStream.java:1028)
	at RecursionTest.doSome(RecursionTest.java:9)
	at RecursionTest.doSome(RecursionTest.java:10)
	........

递归的注意事项

1.什么是递归?
:方法自身调用自身。
a(){
a();
}

2.递归是很耗费栈内存的,递归算法能不用尽量别用。

3.递归必须要有结束条件,没有结束条件一定会引起栈的溢出错误

4.递归即使有了结束条件,即使结束条件是正确的,也可能会发生栈内溢出

递归求和

public class RecursionTest1 {
    public static void main(String[] args) {
        int n = 10;
        int retValue = sum(n);
        System.out.println(retValue);
    }

    public static int sum(int n){
        if (n!=1){
            return n + sum(n-1); //不停的返回递归的值(出栈)
        }
        return 1;
    }
}

内存分析
在这里插入图片描述
递归的调用过程类似汇编中的中断过程。
在这里插入图片描述
把图片向左旋转90°就是栈的结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值