当前位置: 首页 > news >正文

方法的有关知识(含递归)

方法使用

方法就是一个 代码片段 . 类似于 C 语言中的 " 函数 "

方法(代码片段)定义:

public class Method{
// 方法的定义
	public static int add(int x, int y) {
		return x + y;
	}
}

修饰符(public static) 返回值类型 方法名称([参数类型 形参]){  

方法体代码;

[return 返回值];

}

方法调用

需要开辟内存--方法调用结束 内存销毁

过程:调用方法--传递参数--找到方法地址--执行被调用方法的方法体--被调方法结束返回--回到主调方法继续往下执行

定义方法不执行方法代码只有调用才执行;一个方法可调用多次

方法传参

形参:函数中自变量,用来保存函数在调用传递的值

实参:拷贝到形参中,形参和实参本质是两个实体

方法重载

方法名相同,但是参数列表不同(参数的个数、参数的类型、类型的次序),与返回值类型是否相同无关

在方法名相同的情况下,这三个只要有一个不同,那么这个方法就会被重载;

两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的(编译出错)

方法签名

在同一个作用域中不能定义两个相同名称的标识符。(方法中不能定义两个名字一样的变量)

类中可以定义方法名相同的方法--方法签名即:经过编译器编译修改过之后方法最终的名字

具体方式为:方法全路径名+参数列表+返回值类型,构成方法完整的名字。

使用JDK自带的javap反汇编工具查看,具体操作如下:

  1. 先对工程进行编译生成.class字节码文件
  2. 在控制台中进入到要查看的.class所在的目录
  3. 输入:javap -v 字节码文件名字即可

 方法签名中的一些特殊符号说明

[--引用类型,以L开头,以;结尾,中间是引用类型的全类名

递归

定义

一个方法在执行过程中 调用自身 , 就称为 " 递归 ".
递归相当于数学上的 " 数学归纳法 ", 有一个起始条件 , 然后有一个递推公式

必要条件

1. 将原问题划分成其子问题,注意:子问题必须要与原问题的 解法相同
2. 递归出口

调用栈

方法调用的时候, 会有一个 "栈" 这样的内存空间 描述当前的调用关系 . 称为调用栈.
每一次的方法调用就称为一个 " 栈帧 ", 每个栈帧中包含了这次调用的参数是哪些, 返回到哪里继续执行等信息
运用递归求斐波那契数
public class test {
    public static void main(String[] args) {
        System.out.println(fib2(3));
        System.out.println(fib2(6));
    }
public static int fib2(int n){
        if(n==1||n==2){
            return 1;
        }
        int f1=1;
        int f2=1;
        int f3=1;
        for(int i=3;i<=n;i++){
            f3=f1+f2;
            f1=f2;
            f2=f3;
        }
        return f3;
}

可以使用循环来减少递归中的数据冗余

public static int fib(int n) {
  int last2 = 1;
  int last1 = 1;
  int cur = 0;
  for (int i = 3; i <= n; i++) {
    cur = last1 + last2;
    last2 = last1;
    last1 = cur;
 }
  return cur;

相关文章:

  • 爬虫反爬:CSS位置偏移反爬案例分析与实战案例
  • Tornado框架内存马学习
  • PyTorch 源码学习:GPU 内存管理之它山之石——TensorFlow BFC 算法
  • HarmonyOS学习第7天: 文本组件点亮界面的文字魔法棒
  • 【蓝桥杯】每天一题,理解逻辑(1/90)【Leetcode 移动零】
  • 【错误记录】Arrays.asList 的坑
  • 安装react报错
  • Vue 中,使用模板(Template) 和 Render 函数编写组件的区别
  • 数据存储:一文掌握RabbitMQ的详细使用
  • nginx 搭建 IPv6 -> IPv4 反向代理服务器
  • Python网络安全脚本
  • python生成的exe文件防止反编译(pyinstaller加密)
  • synchronized 底层实现原理
  • 【Java项目】基于Spring Boot的体质测试数据分析及可视化设计
  • 学习笔记05——HashMap实现原理及源码解析(JDK8)
  • vscode java环境中文乱码的问题
  • 本地AI可视化集成工具-开源的AnythingLLM
  • 每日一题——两数之和
  • OpenHarmony DFX子系统
  • 【组态PLC】基于三菱西门子S7-200PLC和组态王液料混合系统组态设计【含PLC组态源码 M016期】
  • 国台办:相关优化离境退税政策适用于来大陆的台湾同胞
  • 南部战区位南海海域进行例行巡航
  • 江西省公安厅警务保障部原主任辛卫平主动交代问题,正接受审查调查
  • 哈莉·贝瑞、洪常秀等出任戛纳主竞赛单元评委
  • 专访丨青年作家杜梨:以动物的视角去观察这个世界
  • 习近平:在庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会上的讲话