• 05 方法_递归


     

    1.1 方法

    1.1.1 方法概念

    封装了特定功能的代码块且可以被重复使用就是方法(Method)形如:

    [访问修饰符] 返回值类型 方法名字(参数列表){
    
    特定功能的代码块
    
    return 返回值
    
    }
    public int add(int a,int b){
    
    int c = a + b;
    
    return c;
    
    }



     

     

    理解:

    ü 修饰符:封装性时再讲,决定了方法的工作范围

    ü 返回值类型:必选,如果没有返回值,须写void。方法只能返回一个值

    ü 方法名:符合标识符命名规则

    ü 参数列表:可以0个、1个、多个,需要同时说明类型。称为形式参数

    ü 方法体:完成具体功能。如果有返回值,必须有return语句;如果没有返回值,默认最后一条语句是return,可以省略。

     

    1.1.2 方法的调用

    方法和方法之间可以相互调用(call/invoke)

    public static void main(String[] args){
    
     
    
    // 方法的调用
    
    int m = 10;
    
    int n = 20;
    
    int r = 0;
    
    r = add(m,n);
    
    System.out.println(r);
    
    }


    形式
    参数(形参):方法在定义时的参数称为形式参数。 

    实际参数(实参):方法在调用的过程中传入的参数,称为实参。

    实参和形参的工作原理A

    方法调用时

    实参 -> 形参:复制传递

    1.2 方法重载(overload)

    一个类中可以定义多个相同名称参数列表不同的方法我们把这个现场称为方法重载。

    方法重载判断的条件:

    [1]同一

    [2]方法名称相同

    [3]参数列表不同(类型不同、个数不同顺序不同)

    引入概念-方法签名(Method sign)

    编程语言中,方法的名字形参列表的类型构成了方法签名。

    同一个类中,方法名称相同但方法签名不同构成方法重载。

    public class Test02{
    // add(int,int)
    public static int add(int a,int b){
    int c = a + b;
    return c;
    }
    // add(int,int,int)
    
    public static int add(int a,int b,int c){
    int d = a + b+ c;
    return d;
    }
    // add(float,float)
    public static float add(float a,float b){
    float r = a + b;
    return r;
    }
    // add(int,float)
    
    public static float add(int a,float b){
    float r = a + b;
    return r;
    }
    //add(float,int)
    
    public static float add(float a,int b){
    float r = a + b;
    return r;
    }
    // add(int,float)
    /*
    public static float add(int b,float a){
    
    float r = a + b;
    
    return r;
    
    }
    */
    // add(float,int)
    /*
    public static float add(float b,int a){
    float r = a + b;
    return r;
    }
    */
    public static void main(String[] args){
    add(1,2,4);
    add(1.0f,1)
    }
    }


    调用时,会根据不同的参数列表选择对应的方法。 

    总结:

    – 在同一个类中

    – 方法的名称相同

    – 参数的类型,个数,顺序不同

    – 与方法的修饰符和返回值类型无关

    1.3 递归

    方法自身调用自身的过程叫做方法的递归(recursion)

    递归问题的特点

    – 一个问题可被分解为若干层简单的子问题

    – 子问题和其上层问题的解决方案一致

    – 外层问题的解决依赖于子问题的解决

    需求:5阶乘(5!)

    分析:

    5! = 5*4!

    4! = 4*3!

    3! = 3*2!

    2! = 2*1!

    1! = 1;

    public class Test03{
    
     
    
    public static int rec(int n){
    
    if(1 == n){
    
    return 1;
    
    }
    
     
    
    return n * rec(n-1);
    
    }
    
     
    
    public static void main(String[] args){
    
    int a = 5;
    
    int r = rec(a);
    
    System.out.println("r = " + r);
    
    }
    
    }


    递归执行过程 

    递归效率稍低。

    递归结构包括两个部分:

    • 递归结束条件。解答:什么时候不调用自身方法。如果没有条件,将陷入死循环。
    • 递归体。解答:什么时候需要调用自身方法。

    总结

    • 递归的优点

    – 简单的程序

    • 递归的缺点

    – 但是递归调用会占用大量的系统堆栈,内存耗用多,

    – 在递归调用层次多时速度要比循环慢的多

    • 递归的使用场合

    – 任何可用递归解决的问题也能使用迭代解决。

    – 当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率问题时,可以采用递归;

    – 在要求高性能的情况下尽量避免使用递归,递归既花时间又耗内存。

    本文作者:___mouM
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。
    版权说明:本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.
  • 相关阅读:
    HBase导入数据同时与Phoenix实现同步映射
    Hive导入数据到HBase,再与Phoenix映射同步
    CDH5.16.1离线集成Phoenix
    设计原则学习笔记
    Maven安装配置
    SpringBoot之Mybatis操作中使用Redis做缓存
    Linux服务器防火墙白名单设置
    Linux查看端口占用情况,并强制释放占用的端口
    shell脚本切割tomcat日志文件
    mysql读写分离
  • 原文地址:https://www.cnblogs.com/aknife/p/10784781.html
Copyright © 2020-2023  润新知