Java函数


函数是什么?

大家一看到函数二字可能就会联想到数学中的函数,但其实这就是两个完全不同的东西。

  • 那么究竟Java中的函数是什么呢?
  • Java中的函数又叫做方法,它是用来解决某一特定的问题代码集合。
  • 它有简化整个过程的作用,而且提高了代码的复用性。比方说,我们将解决一个问题的一块代码写进一个函数内,这样我们需要再次解决同样的问题时就可以直接调用,也就不需要在重新写这块代码。

Java中如何定义函数

既然我们清楚了函数是什么,也了解了他们的作用是什么,那么我们就一起看看Java中如何定义函数吧。

访问修饰符—— 函数返回值的类型或void —— 函数名称([参数列表]) {
————函数体;
————return 返回值;//如果是void就不需要返回值
}

  • 返回值的类型是什么必须在函数名前写清楚,如果不能发生自动转换的则会出现错误提示。
  • 函数的名称也是标识符的一种,需要和标识符的命名规则一致。
  • [参数列表]——这里用来接收值,不是所有的函数都需要接收值。

函数的调用

函数的调用——也就是利用代码使用函数的功能解决问题。
因为函数是不会自己执行的,它需要通过调用才能执行。

一般形式:
函数名称([参数列表]);
有时候我们需要接收函数的返回值,比如返回值为int类型:
int a = 函数名称([参数列表]);
或者先声明a,再用来接收返回值也是可以的。


函数的分类

众所周知,任何事物都具有多面性,也就是说我们可以根据不同的标准分不同的类。
函数的分类也是如此。

  • 根据有无参数分类可分为
    |---- 有参函数
    |-----无参函数
  • 根据有没有返回值可分为
    |----有返回值函数
    |----无返回值函数
  • 根据定义者可分为
    |----系统函数
    |----第三方定义的函数
    |----自定义函数——也就是我们自己写的实现功能的函数,也是构造函数。

函数的重载

函数重载——就是函数的名称相同而参数的类型、数量不同,调用的之后,自动根据参数的类型数量匹配相对应的函数。
注意,函数的调用只和函数名称和参数有关,和函数的返回值没有关系。

lass TestOverLoad {
	public static void main(String[] args) {
		byte a=12;
		add(10,20);//调用第一个add函数
		add(10,20.5);//调用第二个add函数
		add(10.5,20);//调用第三个add函数
		add(10,a);//调用第四个add函数
		add(10);//调用第五个add函数
	}

	public static int add(int a, int b) { 
		return a + b;
	}

	public static double add(int a, double b) {
		return a + b;
	}

	public static double add(double a, int b) {
		return a + b;
	}

    public static int add(int a, byte b) {
		return a + b;
	}

	public static int add(int a) {
		return a + 10;
	}
}


函数的递归

什么是递归呢——函数自己调用自己就叫做递归。

  • 优点:分治理念的体现,可以把非常复杂的问题简单解决。
  • 缺点:缺点就是非常的耗费内存,当栈空间被占用时,会触发StackOverflowError异常!!!

下面我们就来看看递归的应用吧。
比如说,求斐波那契数列的第N项的值。
这是常规的方法,可以看到有些复杂。

import java.util.Scanner;

public class Test01{
	public static void main(String[] args){
	
	System.out.println("求斐波那契数列第N项的值(1,1,2,3,5…………)");
	Scanner sc = new Scanner(System.in);
	System.out.print("请输入N的值:");
	int n = sc.nextInt();
	
	System.out.println(feibo(n));
	}
	
	public static int feibo(int n){
	    int a = 1,b=1;
		int temp;
		for (int i = 2;i<=n ;i++ )
		{
			temp=b;
			b = a+b;
			a =temp;
		
		}
		return a;
	}
        
}

这是用递归的方法。
斐波那契数列,我们知道他的第n项值等于(n-1)项加上(n-2)项的和所以我们只需要直接返回feibo(n-1) + feibo(n-2)就行,因为斐波那契数列前两项都是1,所以我们加一个条件判断,当n 等于1或者n等于2时令返回值为1就行。
注意:使用递归会非常的耗费内存,所以一般使用的递归的层数不要太大(不要大于1000层)。
而且一定要加上条件,不然就会变成死循环,会触发StackOverflowError异常!!!

import java.util.Scanner;

public class Test01{
	public static void main(String[] args){
	System.out.println("求斐波那契数列第N项的值(1,1,2,3,5…………)");
	Scanner sc = new Scanner(System.in);
	System.out.print("请输入N的值:");
	int n = sc.nextInt();
	
	System.out.println(feibo(n));
	}
	public static int feibo(int n){
        if (n==1 ||n==2){
			return 1;
        }
	    return feibo(n-1) + feibo(n-2);
	}
}
	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值