1. 程式人生 > 其它 >面向物件(上)-方法-遞迴方法

面向物件(上)-方法-遞迴方法

一、定義

遞迴方法:一個方法體內呼叫它自身

二、如何理解遞迴方法?

  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:快排
}
作者:犄角旮旯是程式媛吖 出處:https://www.cnblogs.com/xiaolinischengxuyuan/ 版權:本文版權歸作者和部落格園所有,歡迎轉載,未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。