当前位置: 主页 > JAVA语言

java递推算法-(每日一题)虚拟机栈溢出的应用场景解析

发布时间:2023-06-15 09:13   浏览次数:次   作者:佚名

一、概述:

Java递归:简单说就是函数自身直接或间接调用函数的本身。

二、应用场景:

若:一个功能在被重复使用,并每次使用时,参与运算的结果和上一次调用有关java递推算法,这时就可以使用递归来解决这个问题。

使用要点:

1java递推算法,递归一定明确条件。否则容易栈溢出。

2,注意一下递归的次数。

三、示例:

最简单的递归演示

public class recursionDemo {
    public static void main(String[] args) {
        show();
    }
    private static void show() {
        method();
    }
    private static void method() {
        show();
    }
}

四、实际示例

我们都知道 6的二进制是110,那么程序是怎么执行的呢?

代码示例:

 public static void main(String[] args) {
        toBin(6);
    }
    private static void toBin(int num) {
        if (num>0){
            //取余
            System.out.println(num%2);
            toBin(num/2);
        }
    }

java实现递归并搜索_怎么推算干支纪日法_java递推算法

运行过程:

java实现递归并搜索_怎么推算干支纪日法_java递推算法

2、递归演示二:计算1-5,求和

public static void main(String[] args) {
        //1-5求和
        int sum = getSum(5);
        System.out.println(sum);
    }
    private static int getSum(int num) {
        int x=9;
        if (num==1){
            return 1;
        }
        return  num+getSum(num-1);
    }

java递推算法_怎么推算干支纪日法_java实现递归并搜索

程序运行图:

java实现递归并搜索_java递推算法_怎么推算干支纪日法

五、递归的缺点

在使用递归时,一定要考虑递归的次数,负责很容易造成虚拟机 “栈溢出”。

仍然使用上面的求和代码,只是这次将求和基数变为 90000000,看看结果如何

public static void main(String[] args) {
        //1-90000000求和
        int sum = getSum(90000000);
        System.out.println(sum);
    }
    private static int getSum(int num) {
        int x=9;
        if (num==1){
            return 1;
        }
        return  num+getSum(num-1);
    }

果然就造成了虚拟机栈溢出。

怎么推算干支纪日法_java实现递归并搜索_java递推算法