05 方法_递归
2019-04-29 08:50:16来源:博客园 阅读 ()
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); } }
递归执行过程
递归效率稍低。
递归结构包括两个部分:
- 递归结束条件。解答:什么时候不调用自身方法。如果没有条件,将陷入死循环。
- 递归体。解答:什么时候需要调用自身方法。
总结
- 递归的优点
– 简单的程序
- 递归的缺点
– 但是递归调用会占用大量的系统堆栈,内存耗用多,
– 在递归调用层次多时速度要比循环慢的多
- 递归的使用场合
– 任何可用递归解决的问题也能使用迭代解决。
– 当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率问题时,可以采用递归;
– 在要求高性能的情况下尽量避免使用递归,递归既花时间又耗内存。
原文链接:https://www.cnblogs.com/aknife/p/10784781.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:新人报道
- 类的继承,方法重新中修饰符如何定义 2020-06-10
- java里面main方法中的String[]args 2020-06-07
- 错误: 在类中找不到 main 方法, 请将 main 方法定义为: & 2020-06-06
- 学习笔记之方法引用 2020-06-06
- Java连载120-反射机制获取构造方法和父类、父接口 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash