zoukankan      html  css  js  c++  java
  • 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变量

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

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

  • 相关阅读:
    MySQL索引
    《深度探索C++对象模型》笔记——Data语意学
    《深度探索C++对象模型》笔记——Function语意学
    近期的bug常见[从以前的零散笔记中整理]
    一个小trick
    3月9日-日记
    第一次考试_心得
    第一次考试_笔记
    哈希笔记
    Dp刷版笔记
  • 原文地址:https://www.cnblogs.com/sunTin/p/6640206.html
Copyright © 2011-2022 走看看