IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【Java】方法的使用及递归 -> 正文阅读

[Java知识库]【Java】方法的使用及递归

写在前面:大家好,我是菜鸟小胖p。今天这篇博客是Java的方法。方法,其实就是c语言的函数。文章还提到了重载,要注意区分重载和重写(后面文章也会提到),除此之外还介绍了递归。关于博客内容,如果有不懂的也可以在评论区留言,懂得不多,但知无不言言无不尽。能力有限,哪里有错误欢迎指正!

初识方法

Java中的方法类似于c语言中的函数

观察下面代码,体会方法的好处。

//求两个数的最大值
public static int maxTwoNum(int a,int b) {
    return a>b ? a : b;
}
//求三个数的最大值
public static int maxThreeNum(int a,int b,int c) {
    int max=maxTwoNum(a,b);
    return maxTwoNum(max,c);
}
public static void main(String[] args) {
    int a=10,b=23,c=4;
    System.out.println(maxThreeNum(a,b,c));

灵活使用方法,可以减少重复代码,使代码更简单。

实参、形参的关系

Java当中只有按值传递

分析如下代码:交换两个整型变量

public static void swap(int x,int y){
    int tmp=x;
    x=y;
    y=tmp;
}
public static void main5(String[] args) {
    //交换两个整型变量的错误演示
    int a=10;
    int b=20;
    swap(a,b);
    System.out.println(a);
    System.out.println(b);
}

输出结果为10 20,没有完成两数的交换。对于基础类型来说, 形参相当于实参的拷贝. 即 传值调用

public static void swap1(int[] arr){
    int tmp=arr[0];
    arr[0]=arr[1];
    arr[1]=tmp;
}
public static void main(String[] args) {
    //交换两个整数的正确方法
    int[] arr={10,20};
    swap1(arr);
    System.out.println(Arrays.toString(arr));
}

解决方案:传引用类型参数,如数组。

练习:求n个阶乘之和

public static int add(int n) {
    int j=1;
    int sum=0;
    for(j=1;j<=n;j++){
        sum += factor(j);
    }
    return sum;
}
public static int factor(int j){
    int i=1;
    int rst=1;
    for(i=1;i<=j;i++){
        rst *= i;
    }
    return rst;
}
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int num=scan.nextInt();
    System.out.println(add(num));
}

方法的重载(overload):

同一个方法名字, 提供不同版本的实现, 称为方法重载

  • 方法名相同
  • 返回值不做要求
  • 参数列表不同(参数个数或参数类型不同)
  • 同一个类当中
public static int sum(int a,int b) {
    return a+b;
}
public static double sum(double a,double b) {
    return a+b;
}
public static void main(String[] args) {
    System.out.println(sum(4,6));
}

面试题:重载和重写的区别

方法的递归

一个方法在执行过程中调用自身, 就称为 “递归”。

递归把大问题化解成小问题,求解递归问题,要找到终止条件和递归公式。

求n的阶乘

image-20211123150435673

public static int factor(int n) {
    if(n==1){
        return 1;
    }else {
        return n * factor(n - 1);
    }
}
public static void main(String[] args) {
    System.out.println(factor(4));
}

求n个阶乘之和

public static int factor(int i){
    if(i==1){
        return 1;
    }else{
        return i*factor(i-1);
    }
}
public static void main(String[] args) {
    int sum=0;
    Scanner scan = new Scanner(System.in);
    int num=scan.nextInt();
    for (int i = 1; i < num; i++) {
        sum+= factor(i);
    }
    System.out.println(sum);
}

按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)

public static void func(int n) {
    if(n>9){
        func(n/10);
    }
    System.out.print(n%10+" ");
}
public static void main(String[] args) {
    func(123);
}

递归求 1 + 2 + 3 + … + 10

public static int sum(int n) {
    if (n==1) {
        return 1;
    } else {
        return n+sum(n-1);
    }
}
public static void main(String[] args) {
    System.out.println(sum(10));
}

写一个递归方法,输入一个非负整数,返回组成它的数字之和.

例如,输入 1729, 则应该返回1+7+2+9, 它的和是19

public static int func(int n) {
    if(n>9){
        return n%10+func(n/10);
    }
    return n;
}
public static void main(String[] args) {
    System.out.println(func(5211));
}

求斐波那契数列的第N项:

public static int fib(int n) {
 if (n == 1 || n == 2) {
 return 1;
 }
 return fib(n - 1) + fib(n - 2);
} 

不建议用递归实现斐波那契数列,建议用循环。

public static int func(int n) {
    int n1=1;
    int n2=1;
    int n3=1;
    for(int i=3;i<=n;i++) {
        n3=n1+n2;
        n1=n2;
        n2=n3;
    }
    return n3;
}
public static void main(String[] args) {
    System.out.println(func(1));
}

提示:思考递归时,横向思考,不要展开递归的代码

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:54:46  更:2022-01-16 12:54:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:25:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码