Java系列7—方法重载(overload)和递归函数

方法重载和递归方法

一、方法重载

方法重载:两个方法的功能虽然不同,但是实现的功能类似,让程序员调用的时候就像调同一个方法。

(1)方法重载示例:
/*
	体验方法重载的优点:
		* 程序员调用方法的时候比较方便
	
	前提:功能相似,功能不同时需要编写不同的方法。

*/

public class OverloadTest02
{
	public static void main(String[] args){
		
			// 调用方法
		int result1 = sum(1,2);
		System.out.println(result1);

		// 调用方法
		double result2 = sum(1.0,2.0);
		System.out.println(result2);

		// 调用方法
		long result3 = sum((long)1,(long)2);
		System.out.println(result3);
	}

	// 定义一个方法,计算两个int类型数据的和
	public static int sum(int a, int b){
		return a+b;
	}
	
	// 定义一个方法,计算两个double类型数据的和
	public static double sum(double a, double b){
		return a+b;
	}
	
	// 定义一个方法,计算两个long类型数据的和
	public static long sum(long a, long b){
		return a+b;
	}
}
(2)深入解析方法重载
/*
方法重载:
	
	1、方法重载又被称为overload

	2、什么时候考虑使用方法重载方法名相同
		* 功能相似的时候,尽可能让方法名相同
		* 功能不同时要让方法名不同

	3、什么条件满足之后构成了方法重载
		* 在同一个类中
		* 方法名相同
		* 参数列表不同:
			- 数量不同
			- 类型不同
			- 顺序不同
		
	4、方法重载和什么有关系,和什么没关系?
		* 方法重载和方法名+参数列表有关系
		* 和返回值的类型没关系
		* 和修饰符列表无关

*/


public class OverloadTest03
{
	public static void main(String[] args){
		
		m1(3);
		m1();
		m1(3,5);
		m1(1.0,3);

	}
	
	public static void m1(int a){} 
	public static void m1(){} 
	public static void m1(int a,int b){}
	public static void m1(double a,int b){} 
	
	// 编译报错
	/*
	public static void x(){}
	public static int x(){}
	*/
}
(3)方法重载示例
/*
	方法重载的具体应用
*/


public class OverloadTest04
{
	public static void main(String[] args){
		U.p("10");
		U.p(10);
		U.p(20.0);
		U.p('1');
	}
}


class U
{
	public static void p(byte a){
		System.out.println(a);
	}
	public static void p(short a){
		System.out.println(a);
	}
	public static void p(int a){
		System.out.println(a);
	}
	public static void p(long a){
		System.out.println(a);
	}
	public static void p(double a){
		System.out.println(a);
	}
	public static void p(boolean a){
		System.out.println(a);
	}
	public static void p(char a){
		System.out.println(a);
	}
	public static void p(String a){
		System.out.println(a);
	}
}

二、递归方法

(1)递归方法详解
/*
	关于方法的递归调用
		1、什么是递归?
			方法自身调用自身。
			a(){
				a();
			}
		2、递归是很耗费内存的,递归算法可以不用的时候尽量别用

		3、以下程序会造成"栈内存溢出"错误:
			Exception in thread "main" java.lang.StackOverflowError
			栈内存溢出错误
			错误无法挽回,JVM停止工作。
		
		4、递归必须要有结束条件,没有结束条件一定会发生内存溢出错误。

*/

public class RecursionTest01
{
	public static void main(String[] args){

		System.out.println("main begin");
		doSome();
		System.out.println("main over");
	}

	public static void doSome(int num){
		
		// System.out.println("doSome begin");
		doSome();  // 这行代码不结束,下一行程序是不执行的
		System.out.println("doSome over");
	}
}
(2)递归方法示例
/*
	1、使用递归实现斐波那契数列
	2、使用递归实现1~N的和
	3、计算阶乘
*/

public class RecursionTest02
{
	public static void main(String[] args){
		int resultFeb = Feb(5);
		System.out.println(resultFeb);

		int resultSum = sum(3);
		System.out.println(resultSum);

		int resultCheng = cheng(5);
		System.out.println(resultCheng);
	}
	
	// 1、 Feb那契数列
	public static int Feb(int a){
		if(a ==1 || a==2){
			return 1;
		}
		return Feb(a-1)+Feb(a-2);
	}
	
	// 2、使用递归计算1~N的和
	public static int sum(int n){
		if(n==1){
			return 1;
		}
		return n + sum(n-1);
	}
	
	// 3、计算阶乘
	public static int cheng(int n){
		if (n==1)
		{
			return 1;
		}
		return n*cheng(n-1);
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值