1. 程式人生 > >2018.3.31 java中的遞歸

2018.3.31 java中的遞歸

lin package str static n-1 pre 特點 等於 com

java中的遞歸

1.概念

    定義一個方法時,出現本方法調用本方法的過程,稱之為遞歸

2.特點

    必然有一個邊界條件
    使用遞歸代碼往往更簡潔,可讀性強

3.什麽時候使用遞歸

n的階乘和n的累加定義
    
    f(n) =1  
    f(n)=f(n)*f(n-1)

4.普通實現與遞歸實現的比較

普通實現
    //計算5的階乘
    public class Demo {
    public static void main(String[] args) {
        int sum = 1;
        for (int i =5; i >=1; i--) {
            sum *= i;
        }
        System.out.println(sum);
    }
}



遞歸實現:
/**
 *在main函數外面定義方法,不然會報錯
 *
 * 計算5的階乘(result = 5*4*3*2*1)
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(f(5));
    }
    public static int f(int n) {
        if (1 == n){
            return 1;
        }else{
            return n * f(n - 1);
        }
    }
}

6.按照遞歸的三個條件來分析

    邊界條件:階乘,乘到最後一個數,返回1,程序執行到底
    遞歸前進段:當前的參數不等於1的時候,繼續調用自身;
    遞歸返回段:從最大的數開始乘,如果當前參數是5,那麽就是5*4,即5*(5-1)即n*(n-1)

7.經典遞歸算法實例----斐波那契數列

package com.lanqiao.demo2;

/**
 * 斐波那契序列
 * 
 * @author qichunlin
 *
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(f(4));
        }
    
    public static int f(int n){
        if(n==1||n==2){
            return 1;
        }else{
            return f(n-1)+f(n-2);
        }
    }
}

2018.3.31 java中的遞歸