Java方法的调用及使用

本文详细介绍了Java中方法的调用方式,包括单独调用、打印调用和赋值调用,并强调了变量与方法名称可以重名。同时,讲解了参数传递的概念,区分了形式参数和实际参数。文章还深入探讨了递归调用,举例展示了阶乘计算和斐波那契数列的递归实现,指出递归虽直观但消耗内存,建议在适当情况下使用循环。最后,通过计算分数序列的前20项和展示了循环的效率优势。
摘要由CSDN通过智能技术生成

今天学习了方法的调用,一般的,在Java语言中,调用方法有三种方式。
单独调用,这种方式无法使用方法的返回值。格式:方法名称(参数值);
在这里插入图片描述
调用是show(1,5),这个show方法没有返回值,所以不能接收返回值,否则语法报错【int k=show(1,5);】;如果有返回值,可以不接受返回值
在这里插入图片描述
打印调用。这种方式可以将方法的返回值直接打印。格式:System.out.println(方法名称(参数值)); 注意使用sysout方法调用需要有返回值
赋值调用。这种方式可以将方法的返回值赋值给一个变量,注意变量的数据类型必须和方法的返回值类
型对应。格式:数据类型 变量名称= 方法名称(参数值)

重名问题

变量的名称是否可以与方法名称重名?可以。
在这里插入图片描述
·
两个不同的方法中,能否各自有一个重名的变量?可以,而且各个方法中的临时变量之间没有任何关系。
main方法中有2个临时变量begin和end,add方法中也有两个临时变量begin和end,这个方法中的临时变量没有任何关系,各自生存在不同的方法中。

参数传递

形式参数:在定义方法的时候,写在小括号之内的变量,就叫形式参数。实际上在方法定义中起到
占位符的作用,会在方法调用时被传递过来的实际值所替代
实际参数:在调用方法的时候,真正传入方法里的数据,叫做实际参数。
圆括号中的实参列表为调用方法时实际传入的实际参数,称为实参列表。声明方法时圆括号中的参数称为形式参数,形式参数和实际参数在数据类型和个数上一定要匹配
注意:调用方法时形式参数和实际参数的个数和顺序必须一致,数据类型也必须相同。

两条规则

对于基本类型来说,形式参数的操作【不会】影响实际参数。值是单向传递
在这里插入图片描述
对任何语言来说,方法或者函数解决了需要重复使用的代码的次数

递归调用

递归调用指在方法执行过程中允许出现直接或者间接的该方法本身的调用
计算阶乘5!
阶乘: 0!=1,n!=(n-1)!×n
在这里插入图片描述

斐波那契数列Fibonacci sequence,又称黄金分割数列,以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34…

public class Test05 {
 public static void main(String[] args) {
12
递归调用比较符合正常人的思维方式,但是相当的浪费内存,所以如果能使用其他方式解决就不要使用
递归。
循环和递归对比:
递归:易于理解、速度慢、存储空间大
循环:不易于理解、速度快、存储空间小
有一分数序列:2/13/25/38/513/821/13... 求出这个数列的前20项之和
 int months = 0;
 Scanner sc = new Scanner(System.in);
 while (true) {
 System.out.println("月份:");
 String ss = sc.nextLine();
 try {
 months = Integer.parseInt(ss);
 if (months > 0) break;
 System.out.println("请重新输入月份数!");
 } catch (Exception e) {
 System.out.println("请输入合法的月份数!");
 }
 }
 int num = tongji(months);
 System.out.println(months + "月后的兔子数为:" + num);
 }
 public static int tongji(int months) {
 if (months > 0) {
 if (months == 1 || months == 2) return 1;
 return tongji(months - 1) + tongji(months - 2);
 }
 return 0;
 } }

递归调用比较符合正常人的思维方式,但是相当的浪费内存,所以如果能使用其他方式解决就不要使用递归。
循环和递归对比:
递归:易于理解、速度慢、存储空间大
循环:不易于理解、速度快、存储空间小

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13… 求出这个数列的前20项之和

public class Test06 {
 public static void main(String[] args) {
 double res = 0;
 for (int i = 1; i <= 20; i++) {
 res += 1. * diguiFenzi(i) / diguiFenmu(i);
 }
 System.out.println(res);
 }
 public static int diguiFenzi(int n) {
 // 如果使用递归调用必须保证有退出递归的点,必须保证不断逼近退出的点
 if (n == 1) return 2;
 else if (n == 2) return 3;
 else return diguiFenzi(n - 1) + diguiFenzi(n - 2);
 }
 public static int diguiFenmu(int n) {
 if (n == 1 || n == 2) return n;
 else return diguiFenmu(n - 1) + diguiFenmu(n - 2);
 } }

递归调用的特征
Java语言支持方法的递归调用
使用递归调用时必须可以逐渐接近结束点,不能发散
递归调用比较符合正常人的思维方式,但是相当的浪费内存,所以如果能使用其他方式解决就不要使用递归

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值