java递归参数只能一用到底_10java可变长参数与递归

可变长参数

d202a269a7d1e3f8b8309e59682e32ab.png

示例:

package MethodDemo;

public class Demo05 {

public static void main(String[] args) {

Demo05 demo05 = new Demo05();//因为写方法时没有写成类方法,所以调用这个方法时要new一个类,通过类调用,

demo05.findmin(3.3,3.4,3.5);

demo05.findmin(1,3.14, 56, 59,8.2,96,5.6);//方法的重载

}

public void findmin(int a,double... numbers) {//注意这里使用可变长参数时,一定要把可变长参数放在参数的最后一项

if (numbers.length == 0){

System.out.println("Don't be kidding");

return;

}

double min = numbers[0];

for (int i = 0; i < numbers.length; i++) {

if (min > numbers[i]) {

min = numbers[i];

}

}

if(a<=min){

min=a;

}

System.out.println("The minimum number is :" + min);

}

public void findmin(double... numbers) {

if (numbers.length == 0){

System.out.println("Don't be kidding");

return;

}

double min = numbers[0];

for (int i = 0; i < numbers.length; i++) {

if (min > numbers[i]) {

min = numbers[i];

}

}

System.out.println("The minimum number is :" + min);

}

}

28a6c0144005334a864d15bf4108f7c0.png

需要注意的是这里使用的可变长参数的实质就是产生了一个名字为numbers的一维数组,然后使用的时候使用数组的下标访问数组的内容

递归思想

package MethodDemo;

public class Demo06 {

public static void main(String[] args) {

//计算5!(5的阶乘)5!=5*4*3*2*1

double factor = factorial(5);

System.out.println("5!=" + factor);

}

public static double factorial(double num) {

if (num == 1) {

return 1;

} else {

return num * factorial(num - 1);

}

}

}

6b76660f86730657fda52e158c7767df.png

​ 图1

516e5a439dcd79f2a5f2198ef0a12335.png

​图2

关于递归的解释:

首先知道递归的定义:自己调用自己;根据流程图看到,每次都是返回上一次的计算结果乘以下一次的函数值 ,乘到最后一项是f(1),递归结束条件 num=1时,返回值为1,也即是f(1)=1;重点来了!看图2的对应关系,当递归临界条件f(1)=1知道了之后,第4级立即变成num*(num-1),而此时的num的值是2,所以就得到了第四级的结果为2,依次类推,即可得到计算结果。

虽然factorial方法里面有两个return,但是两个return操作的是一个内存空间。

需要说明的是,使用递归并不是一定很高级,只有在递归次数很少时,使用递归可以简便一些;但是递归次数很大时,编译器会进行压栈操作,需要把大量的中间变量进行压栈,如果递归次数很多,就会产生内存不足等一系类问题。

561279a77d8125edd4d580bd0fb8556a.png

当然,也可以使用其他方法达到相同的效果

package MethodDemo;

public class Demo06 {

public static void main(String[] args) {

//计算5!(5的阶乘)5!=5*4*3*2*1

Demo06 demo06 = new Demo06();

demo06.factorial(5);

}

public void factorial(double num){

double factorial=1;

for (int i = 5; i >=1; i--) {

factorial*=i;

}

System.out.println("5!="+factorial);

}

}

运行结果如下:

6bc0a7977d0977d8bb2af522fcf7d0c5.png

练习:写一个简易的计算器程序。

package MethodDemo;

import java.util.Scanner;

public class Demo07 {

public static void main(String[] args) {

//简易计算器,没有混合运算的功能

String symbol = "a";

System.out.println("Welcome to the simple calculator.");

Scanner scanner = new Scanner(System.in);

while (!scanner.hasNext("#")) {

symbol = scanner.next();

double num1 = scanner.nextDouble();

double num2 = scanner.nextDouble();

switch (symbol) {

case "+":

Add(num1, num2);

break;

case "-":

Minuse(num1, num2);

break;

case "*":

Multiply(num1, num2);

break;

case "/":

Division(num1, num2);

break;

default:

System.out.println("End!");

}

}

scanner.close();

}

public static void Add(double num1, double num2) {

System.out.println(num1 + "+" + num2 + "=" + (num1 + num2));

}

public static void Minuse(double num1, double num2) {

System.out.println(num1 + "-" + num2 + "=" + (num1 - num2));

}

public static void Multiply(double num1, double num2) {

System.out.println(num1 + "*" + num2 + "=" + (num1 * num2));

}

public static void Division(double num1, double num2) {

System.out.println(num1 + "/" + num2 + "=" + (num1 / num2));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值