面向对象(上)-方法-递归方法

一、定义

递归方法:一个方法体内调用它自身

二、如何理解递归方法?

  1. 方法的递归包含了一种隐式的循环,它会重复执行某段代码,使这种重复执行无须循环控制
  2. 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环

三、举例

public class RecursionTest {
    public static void main(String[] args) {
        //例1:计算1-100之间所有自然数的和
        //方式一:for循环
        int sum = 0;
        for(int i = 1;i <= 100;i++){
            sum += i;
        }
        System.out.println("使用for循环得到的1-100之间所有自然数的和为:" + sum);
        //方式二:递归方法
        RecursionTest test = new RecursionTest();
        System.out.println("使用递归得到的1-100之间所有自然数的和为:" + test.getSum(100));

        //例2:计算1-100之间所有自然数的乘积
        //方式一:for循环
        double mut = 1;
        for(int i = 1;i <= 100;i++){
            mut *= i;
        }
        System.out.println("使用for循环得到的1-100之间所有自然数的乘积为:" + mut);
        //方式二:递归方法
        System.out.println("使用递归得到的1-100之间所有自然数的乘积为:" + test.getMulti(100));

        //例3:f(n+2) = 2*f(n+1) + f(n)
        System.out.println("f(10) = " + test.getResult(10));

        //例4:斐波那契数列
        System.out.println("斐波那契数列的第10个值为:" + test.getNum(10));
        for(int i = 1;i <= 10;i++){
            System.out.print(test.getNum(i) + " ");
        }
    }

    //例1:计算1-n之间所有自然数的和
    public int getSum(int n){
        if(n == 1){
            return 1;
        }else{
            return n + getSum(n - 1);
        }
    }

    //例2:计算1-n之间所有自然数的乘积:n!
    public double getMulti(int n){
        if(n == 1){
            return 1;
        }else{
            return n * getMulti(n - 1);
        }
    }

    //例3:已知有一个数列:f(0) = 1,f(1) = 4,f(n+2) = 2*f(n+1) + f(n),其中n是大于0的整数,求f(10)的值
    public int getResult(int n){
        if(n == 0){
            return 1;
        }else if(n == 1){
            return 4;
        }else{
            return 2*getResult(n - 1) + getResult(n - 2);
            //return getResult(n + 2) - 2*getResult(n+1);
        }
    }

    //例4:斐波那契数列
    /*输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值1 1 2 3 5 8 13 21 34 55
     *规律:一个数等于前两个数之和
     *要求:计算斐波那契数列的第n个值,并将整个数列打印出来
     */
    public int getNum(int n){
        if(n <= 2){
            return 1;
        }else{
            return getNum(n-1) + getNum(n - 2);
        }
    }

    //例5:汉诺塔问题

    //例6:快排
}
posted @ 2021-07-08 10:08  犄角旮旯是程序媛吖  阅读(62)  评论(0编辑  收藏  举报