php 遞歸 迭代

階乘的求解思路:
5! = 5 * 4!
5! = 5 * 4 * 3!
5! = 5 * 4 * 3 * 2!
5! = 5 * 4 * 3 * 2 * 1!
1! =1;
計算5的階乘時,沒有當即計算出結果,須要求更低的階乘php

求5 的階乘,核心:求其餘數的階乘。
定義一個求階乘的函數fn: fn(5) = 5 * fn(4)
剩下的階乘: fn($n )
在函數fn()中調用自己。ide

1.遞歸思想

1)介紹
將大問題拆分紅多個小問題來解決。
小問題的解決方法與大問題的解決方法一致。
能夠封裝函數來解決大問題(求階乘的函數fn)
小問題的解決能夠經過調用該函數來fn實現,只是輸入的參數不一致而已。函數

2)本質
因爲小問題的解決方法與大問題的解決方法一致,函數內部去調用函數自己。
3)遞歸兩要素
遞歸的調用點(入口):什麼狀況下函數開始調用自己。f(5) = 5 * f(4)
遞歸的出口。何時結束遞歸調用的問題。對於階乘來講:計算1的階乘,
4)應用:階乘
這裏寫圖片描述code

5)遞歸的執行原理
調用一次函數,不會理解獲得結果。須要按照新參數執行函數。不斷的調用新的函數,直到拿到肯定的值,再返回,逐層拿到計算結果。執行時佔用的空間比較大。blog

迭代思想

百數之和:
在1+ 2 + 3+ 4…
將上一次運算的結果做爲條件,計算下一個的結果
7)介紹
又稱遞推:
將已知條件做爲迭代的原始值,不斷有原始值計算出新值的過程。執行效率很是高。
Fibanacci數列 :
一對兔子生小兔子的問題:
1 1 2 3 5 8 13 21 34
這裏寫圖片描述
斐波那契額數列:有以下一個數列:1, 2, 3, 5, 8, 13, 21,……. 其規則是:前兩個已知(即1和2),從第3個開始,其值爲其左邊兩個值的和(此數列稱爲斐波那契數列)。定義一個函數,該函數能夠求出該數列的任意第n個數的值。遞歸

function Fei( $n ){
    if ( $n==1 ) {         //特例值
        return 1;
    } else if ( $n==2 ) {      //特例值
        return 2;
    } else {
        return Fei($n-1) + Fei($n-2);       //遞歸調用
    }
}

3.遞歸與遞推的差別
遞歸在運行過程當中不斷開闢程序運行的內存空間,佔用空間比較大。執行效率比較低。
可是在某些狀況,如讀取文件夾,因爲不知道文件夾有多少層,此時只能使用遞歸思想。圖片

相關文章
相關標籤/搜索