• java基础06 Java中的递归


              一、递归是指直接或间接地调用自身。

        二、递归的注意事项;
                 A:要有出口,否则就是死递归
        B:次数不能过多,否则内存溢出
        C:构造方法不能递归使用

              三、举例子

         递归求阶乘

    /**
     * 求5的阶乘
     * 
     * @author sun
     *
     */
    public class Test {
        public static void main(String[] args) {
            System.out.println(factorial(5));
        }
    
        private static int factorial(int n) {
            if (n == 1) {
                return 1;
            } else {
                return n * factorial(n - 1);
            }
        }
    }

    在jvm篇中,我们已经知道jvm有五大区域,其中栈、堆、方法区是我们必须知道干嘛的,因为程序的运行跟着息息相关。

    方法区:保存JVM装载的类的信息。

    Java栈中的每个帧都保存一个方法调用的局部变量、操作数栈、指向常量池的指针等,且每一次方法调用都会创建一个帧,并压栈。

    应用系统的对象都保存在Java堆中。列如Student s = new Student();

    1、加载Student.class文件进内存

    2、在栈内存为s开辟空间

    3、在堆内存为学生对象开辟空间

    4、对学生对象的成员变量进行默认初始化

    5、对学生对象的成员变量进行显示初始化

    6、通过构造方法对学生对象的成员变量赋值

    7、学生对象初始化完毕,把对象地址赋值给s变量

    每一个方法的调用都会产生一个栈帧,压入到方法栈,当递归调用的时候,方法栈中栈帧的图示和上图类似。

    栈 主要是用来存放栈帧的,每执行一个方法就会出现压栈操作,所以采用递归的时候产生的栈帧比较多,递归就会影响到内存,非常消耗内存。所以能不用递归尽量不用递归。

  • 相关阅读:
    orioledb pg 存储引擎
    nginx ngx_http_addition_module 模块openresty content_by_lua 不能生效的原因
    Windows下Erlang和RabbitMQ下载安装教程
    [建议收藏]缓存雪崩的处理办法
    【精选】Mysql BTree和B+Tree的结构?
    RabbitMQ用户和virtual hosts的添加以及授权
    程序员增加收入的几种方法
    基于redis的keys、scan删除ttl为1的key
    全面了解Nginx主要应用场景
    很佩服的一个Google佬,离职了。。
  • 原文地址:https://www.cnblogs.com/sunTin/p/6640206.html
Copyright © 2020-2023  润新知