一、函数重载
定义:两个函数的函数名称相同,但是参数的个数或者类型不同
参考以下代码:
//1.
public static int add(int x,int y){
return x + y;
}
//2.与1构成重载
public static int add(byte a,int b){
return a + b;
}
//3.与1构成重载
public static int add(int a){
return a + 100;
}
//4.不构成重载
// public static double add(int b,int a){
// return a + b;
// }
//5.与4是相同的函数
// public static double add(int a,int b){
// return a + b;
// }
二、函数递归
定义:函数自身调自身(疯狂拷贝到栈内存---->内存不够---->崩溃!)
即栈溢出错误:StackOverflowError
如果使用递归,必须有终止条件,没有终止条件的递归式死循环!!!
参考以下代码:
1.计算整数之和
/**
* 计算整数之和
* @param m
* @return
*/
public static int add(int m){
if (m == 0){
return 0;
}
return m + add(m - 1);
}
2.计算斐波那契数列
/**
* 计算斐波那契数列
* @param n
* @return
*/
public static int fibonacci(int n){
if (n == 0){
return 0;
}
if (n == 1){
return 1;
}
return fibonacci(n-1)+ fibonacci(n-2);
}
public static int fibonacci2(int n){
int firstNum = 1;
int secondNum = 2;
int temp = 0;
for (int i = 3;i < n;i++){
temp = firstNum + secondNum;
firstNum = secondNum;
secondNum = temp;
}
return temp;
}
3.爬楼梯
/**
* 爬楼梯
*/
public static int floor(int n){
if (n == 1 || n == 2){
return n;
}
return floor(n-1)+floor(n-2);
}
运行结果:
源代码:
import java.util.Scanner;
/**
* 函数递归
*/
public class Recursion {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
int m = scanner.nextInt();
int sum = add(m);
System.out.println(sum);
System.out.print("请输入你要查询的项数:");
int n = scanner.nextInt();
int num = fibonacci(n);
System.out.println("第" + n + "项是" + num);
System.out.print("请输入你要查询的项数:");
int n1 = scanner.nextInt();
int num1 = fibonacci2(n1);
System.out.println("第" + n1 + "项是" + num1);
System.out.println("请输入楼梯的阶数:");
int floor = scanner.nextInt();
int count = floor(n);
System.out.println("第" + floor + "层楼梯有" + count + "种爬法");
}
/**
* 计算整数之和
* @param m
* @return
*/
public static int add(int m){
if (m == 0){
return 0;
}
return m + add(m - 1);
}
/**
* 计算斐波那契数列
* @param n
* @return
*/
public static int fibonacci(int n){
if (n == 0){
return 0;
}
if (n == 1){
return 1;
}
return fibonacci(n-1)+ fibonacci(n-2);
}
public static int fibonacci2(int n){
int firstNum = 1;
int secondNum = 2;
int temp = 0;
for (int i = 3;i < n;i++){
temp = firstNum + secondNum;
firstNum = secondNum;
secondNum = temp;
}
return temp;
}
/**
* 爬楼梯
*/
public static int floor(int n){
if (n == 1 || n == 2){
return n;
}
return floor(n-1)+floor(n-2);
}
}