函数重载与函数递归

一、函数重载

定义:两个函数的函数名称相同,但是参数的个数或者类型不同

参考以下代码:

 //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);
    }

运行结果:

函数重载与函数递归_第1张图片

 源代码:
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);
    }
}

你可能感兴趣的:(Java,SE,java,算法,jvm)