方法
方法有点向oracle 存储过程的函数 方法的定义: Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法 包含以下语法:
修饰符 返回值类型 方法名(参数类型 参数名){ … 方法体 … return 返回值; }
-
方法包含一个方法头和一个方法体。 -
下面是一个方法的所有部分: -
修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。 -
返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需 的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。 -
方法名:是方法的实际名称。方法名和参数表共同构成方法签名。 -
参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参 数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。 -
方法体:方法体包含具体的语句,定义该方法的功能。 比如: 传入两个整数,求最大的那个值:
public class NewGame {
public static void main(String[] args) {
System.out.println(get_max(1,2));
}
public static int get_max(int a,int b)
{
return a>b?a:b;
}
}
方法的重载
上面使用的max方法仅仅适用于int型数据。但如果你想得到两个浮点类型数据的最大值呢? 解决方法是创建另一个有相同名字但参数不同的方法,如下面代码所示:
public class NewGame {
public static void main(String[] args) {
System.out.println(get_max(1.1f, 2));
}
public static int get_max(int a, int b) {
return a > b ? a : b;
}
public static float get_max(float a, float b) {
return a > b ? a : b;
}
}
可变参数
在方法声明中,在指定参数类型后加一个省略号(…) 。 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声 明。语法(int… a)
例子: 传入参数,求最大值:
public class NewGame {
public static void main(String[] args) {
System.out.println(get_max(1,2,3.4,4.5));
}
public static double get_max(double... a){
double max;
double s=a[0];
for (int i = 0; i < a.length; i++) {
if(a[i]>s)
{
s=a[i];
}
}
return s;
}
}
递归
递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个 使用递归技术的方法将会直接或者间接的调用自己。 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原 问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计 算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。 递归结构包括两个部分:
- 递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环。
- 递归体。解答:什么时候需要调用自身方法。
- 递归其实是方便了程序员难为了机器,递归可以通过数学公式很方便的转换为程序。
- 其优点就是易理解,容易编程。但递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销。所以在深度大时,它的时空性就不好了。(会占用大量的内存空间)而迭代虽然效率高,运行时间只因循环次数增加而增加,没什么额外开销,空间上也没有什么增加,但缺点就是不容易理解,编写复杂问题时困难
两道经典的递归题目:
public class NewGame {
public static void main(String[] args) {
System.out.println(get_fin(6));
}
public static int get_fin(int n){
if(n==1){
return 1;
}
else if(n==2){
return 2;
}
else {
return get_fin(n - 1) + get_fin(n - 2);
}
}
}
public class NewGame {
public static void main(String[] args) {
System.out.println(get_fin(1));
}
public static int get_fin(int n){
if(n==10){
return 1;
}
else {
return 2*(get_fin(n+1)+1);
}
}
}
|