java04-方法

java04-方法,第1张

java04-方法 方法

方法有点向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;
    }
}   //结果返回0
可变参数

在方法声明中,在指定参数类型后加一个省略号(…) 。
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声
明。语法(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;
    }
} 
递归

递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个
使用递归技术的方法将会直接或者间接的调用自己。
利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原
问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计
算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
递归结构包括两个部分:

    递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环。递归体。解答:什么时候需要调用自身方法。递归其实是方便了程序员难为了机器,递归可以通过数学公式很方便的转换为程序。其优点就是易理解,容易编程。但递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销。所以在深度大时,它的时空性就不好了。(会占用大量的内存空间)而迭代虽然效率高,运行时间只因循环次数增加而增加,没什么额外开销,空间上也没有什么增加,但缺点就是不容易理解,编写复杂问题时困难

两道经典的递归题目:

//1,1,2,3,5,8,13 给出任意一个整数,求值
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);
        }
    }
}   //结果返回13
//猴子吃桃子问题:有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个!
// 以后每天猴子都吃其中的一半,然后再多吃一个。当到第10天时,
// 想再吃时(即还没吃),发现只有 1个桃子了。问题:最初共多少个桃子?
//f(10)=1;f(9)=4;f(8)=10;f(7)=22;(f(n+1)+1)*2=f(n)
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);
        }
    }
}   //结果返回1534

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5718879.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存