Java——函数

1.什么是函数

在Java中函数也叫方法,它是一段代码,这段代码可以实现某种特定的功能,并且能被反复调用

定义函数格式

访问修饰符  函数返回值类型   函数名称  ([ 参数列表  ])   [  throws  异常列表  ]  {
        函数体;
        [  return  返回值 ;  ]
}
public class test() {
    public static void main(String[] args) {
        returnNumber;
    }
    public void returnNumber() {
        Scanner sc = new Scanner();
        int num = sc.nextInt();
        System.out.println(num);
    }
}
//输出结果为8

函数执行原理

首先会把 main 方法压入到栈中,然后再把 returnNumber()  压入到栈中,由于reutrnNumber() 方法是在栈 顶,因此这个方法也是当前程序要执行 的方法。在执 这个方法时,会在堆中创建 Scanner 对象,并把 sc 这个变量 放到局部变 表中。而这个表中维护的就是这个方法运 过程中的变 。当 returnNumber()方法执行 完后,会把栈顶中的 returnNumber()变 弹出栈,从而 main 就变为了栈顶元素,因此接下就要 继续执行 main 方法,直到程序结束。

2.方法重载

public class OverrideDemo {
    public static void main(String[] args) {
        // 需求:计算指定数的加法操作
        int r = add(2, 3);
        System.out.println(r); //5
        r = add1(2, 3, 4);
        System.out.println(r); // 9
    }
    public static int add(int a, int b) {
        return a + b;
    }
    public static int add1(int a, int b, int c) {
        return a + b + c;
    }
}

由上方法可以看出,相同的功能因为变量的不同使用了多个方法,而命名对于我们来说特别困难,

// 使用重载解决上述问题
public class OverrideDemo {
    public static void main(String[] args) {
        //需求:计算指定数的加法操作
        int r = add(2, 3);
        System.out.println(r); // 5
        r = add(2, 3, 4);
        System.out.println(r); // 9
    }
    public static int add(int a, int b) {
        return a + b;
    }
    public static int add(int a, int b, int c) {
        return a + b + c;
    }
}

通过运行代码,发现输出的结果是一样的,解决了需要命名不同的方法名称的问题

方法重载的特点(面试重点)

1.方法重载是发生在同一个类中

2.方法名称必须相同

3.参数列表必须不同,参数列表包括参数类型、参数个数、参数顺序,三者任意一个不同即可

4.与返回值类型无关

3.递归

什么是递归

所谓递归就是自己调用自己

递归调用很容易死循环,因此需要在递归中一定要有一个出口来退出循环

递归算法的局限性

递归算法不能使用到大的数据量,因为大的数据量容易产出内存的溢出,原因是递归算法会不停的执行进栈操作

递归的使用

使用递归计算阶乘

public class RecursiveTest{
    public static void main(String[] args) {
        int result = recursive(5);
        System.out.println(result);
    }
    public static int recursive(int n) {
        if (n == 1) return 1;
        else return n * recursive(n - 1);
    }
}

使用递归实现累加

public class RecursiveTest2 {
    public static void main(String[] args) {
        int result = add(5);
    }
    public static int add(int n) {
        if (n == 1) return 1;
        else return n + add(n - 1);
    }
}

使用递归实现斐波那契数列

public class RecursiveTest3 {
    public static void main(String[] args) {
        fib(20);
    }
    public static int fib(int n) {
        if (n == 1 || n == 2) return 1;
        else return fib(n - 1) + fib(n - 2);
    }
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值