JavaSE——方法、递归

简介: JavaSE——方法、递归

文章目录

1. 方法

  1. 递归

1. 方法
1.1方法的概念

1.2 方法定义
格式:

实现一个求闰年的方法:

public class Method{

//方法定义
public static boolean isLeapYear(int year){
    if((0==year%4&&0!=year%100)||0==year%400) {
        return true;
    }else{
        return false;
    }
}

}

1.3 方法调用的执行过程

定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行

一个方法可以被多次调用

1.4 方法的重载

  1. 递归

2.1 什么是递归
递归,就是在运行的过程中调用自己

构成递归需具备的条件:

  1. 子问题须与原始问题为同样的事,且更为简单;
  2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理

终止条件必须是在递归最开始的地方,不能把终止条件写在递归结束的位置,这样的话,递归永远退不出来了,就会出现堆栈溢出异常(StackOverflowError)

public void recursion(参数0) {

if (终止条件) {
    return;
}
recursion(参数1);

}
2.2 递归实例
递归求 N 的阶乘
递推公式:N的阶乘用F(n)表示,那么F(n) = n * F(n-1);

import java.util.Scanner;

public class Test {

public static void main(String[] args) {
    int n=0;
    Scanner scanner=new Scanner(System.in);
    n= scanner.nextInt();
    System.out.println(fac(n));
}
public static int fac(int n){
    if(n==1){
        return 1;
    }
    else{
        return n*fac(n-1);
    }
}

}

递归求和
F(n) 代表1到n的和,那么F(n) = n + F(n-1)的和

F(n-1)是1到n-1的和

public class Test {

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

}

}

递归打印数字的每一位
假设用F(n) 代表 要顺序打印n的每一位,如果n是一个1位数,直接输出,如果n是2位数以上。

如:

123 相当于先打印12的每一位,再打印3

12 相当于先打印1的每一位,再打印2

1 只有一位数,直接打印

依次回退打印完,每一位即可

public class Test {

public static void main(String[] args) {
int n=123456;
everypos(n);
}
public static void everypos(int a){
    if(a<10){
        System.out.println(a);
    }
    else{
        everypos(a/10);
        System.out.println(a%10);
    }
}

}

返回的数字之和
要计算123456的每一位,主要在于如何得到每一位。在前面的习题中我们知道,除10 , 模10.可以做到

在执行n=123456的时候,先执行everypos(123456/10)也就是everypos(12345)这个函数,等最后回来之后,才会把n=123456时候的n%10算完

public class Test {

public static void main(String[] args) {
int n=123456;
    System.out.println(everypos(n));
}
public static int everypos(int a){
    if(a<10){
        //System.out.println(a);
        return a;
    }
    else{
       return  everypos(a/10)+a%10;
    }
}

}

递归求斐波那契数列的第 N 项
F(n) 代表第n项斐波那契数列的值,那么F(n) = F(n-1) + F(n-2)的和

public class Test {

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

}

递归求解汉诺塔问题
public class Test {

public static void main(String[] args) {

    Hanio(4,'A','B','C');
}
public static void move(char pos1,char pos3){
    System.out.println(pos1 +"->"+pos3+" ");
}
public static void  Hanio(int n,char pos1,char pos2,char pos3){
    if(n==1){
        move(pos1, pos3);
        return;
    }
    else{
        Hanio(n-1,pos1,pos3,pos2);
        move(pos1,pos3);
        Hanio(n-1,pos2,pos1,pos3);

    }
}

}

相关文章
|
存储 监控 安全
【专栏】探讨Docker Compose的核心概念、使用方法及最佳实践,助你轻松驾驭容器编排的世界
【4月更文挑战第27天】Docker Compose是款轻量级容器编排工具,通过YAML文件统一管理多容器应用。本文分三部分深入讨论其核心概念(服务、网络、卷和配置)、使用方法及最佳实践。从快速入门到高级特性,包括环境隔离、CI/CD集成、资源管理和安全措施。通过案例分析展示如何构建多服务应用,助力高效容器编排与管理。
778 2
|
Ubuntu 网络安全 Docker
Ubuntu 安装与配置ssh (docker)
Ubuntu 安装与配置ssh (docker)
353 0
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | 秒懂 AI - 深度学习五大模型:RNN、CNN、Transformer、BERT、GPT 简介
**RNN**,1986年提出,用于序列数据,如语言模型和语音识别,但原始模型有梯度消失问题。**LSTM**和**GRU**通过门控解决了此问题。 **CNN**,1989年引入,擅长图像处理,卷积层和池化层提取特征,经典应用包括图像分类和物体检测,如LeNet-5。 **Transformer**,2017年由Google推出,自注意力机制实现并行计算,优化了NLP效率,如机器翻译。 **BERT**,2018年Google的双向预训练模型,通过掩码语言模型改进上下文理解,适用于问答和文本分类。
822 9
|
网络协议 Java Unix
从0到服务器开发——TinyWebServer(上)
从0到服务器开发——TinyWebServer
957 1
本地部署Jellyfin影音服务器并实现远程访问影音库-2
本地部署Jellyfin影音服务器并实现远程访问影音库
495 0
|
Java Android开发
UsbHostManager
UsbHostManager
192 4
|
Python
Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
123 0
|
存储 负载均衡 架构师
信通院2023无代码入选案例-云速搭CADT助力索贝提升新闻云资源部署效率
信通院公布2023低代码·无代码最新评估结果,阿里云两案例入选!
356 2
「企业架构」通过平台架构方法增强业务能力
「企业架构」通过平台架构方法增强业务能力
|
Java 数据库连接 Maven
哦嚯,简单聊聊Maven的POM的文件~
哦嚯,简单聊聊Maven的POM的文件~
345 2
哦嚯,简单聊聊Maven的POM的文件~