• java 递归方法


    1.什么是递归?

    方法自己调用自己

    2.当递归时程序没有结束条件,一定会发生:

    栈内存溢出错误:Stack Over flowError,所以递归必须要有结束条件

    3.递归假设是有结束条件的,就不会发生栈内存溢出吗?

    假设结束条件是对的,是合法的,递归也会出现内存溢出,当递归太深的话,导致栈内存不够,因为一直压栈。

    4.在实际的开发中,不建议轻易选择递归,能用for循环while循环代替的,尽量代替。因为循环效率高,耗费内存少。递归耗费的内存比较大,另外递归使用不当,会导致jvm死掉。但在极少数的情况下,不用递归这个程序没法实现。

    5.在实际开发中,假设真正的遇到了递归,怎么解决?

    首先第一步:

      先检查递归的结束条件对不对,如果递归条件不对,必须对条件进一步修改,知道正确为止

    第二步:

      假设递归条件没有问题,这是时候需要手动调整JVM的栈内存初始化大小,可以将占内存空间调大点。

      如果运行时还是出现这个错误,只能继续扩大栈的大小。

    public class Digui {
        public static void main(String[] args) {
            System.out.println(num(10));
            System.out.println(doSome(3));
        }
    
        //计算从1+2+3+4+。。。。n的和
        public static int doSome(int n){
            //首先我传入的3,那么下一次传的时候肯定是2,通过n-1来的所以下次调用是doSome(n-1)
            //最后一个是1,那么直接判停条件是1就可以
            if(n==1){
                return 1; //这是第一次出栈
            }
            return  n+doSome(n-1);
    
        }
    
        //不用递归算数
        public static int num(int n){
            int sum = 0;
            for (int i = 0;i<=n;i++){
                sum = sum + i;
            }
            return sum;
        }

     递归栈内存流程:

  • 相关阅读:
    在LINUX中添加按键的驱动并编译进入内核
    什么是Dojo
    Dojo EnhancedGrid Pagination
    再Repeater模板中,如何获取里面的控件 客户端ID ??
    需求分析的大道理
    PL/SQL块结构和组成元素
    ORACLE SQL:经典查询练手第二篇
    企业信息化的定义、内涵
    背景需要需求规格
    asp.net(c#)两时间段每天是星期几,周几(时间段日历显示)的问题解
  • 原文地址:https://www.cnblogs.com/peiminer/p/13595442.html
Copyright © 2020-2023  润新知