PHP 遞歸和遞推思想

遞歸思想(遞歸函數):

遞歸思想的一個基本形式是在一個函數中,有至少一條語句,又會去調用該函數自身。(求n!問題用遞歸;楊輝三角問題用過遞歸…)

<?php
    funtion digui($n){
        if($n==1){
            return 1;
        }
        return digui($n-1)*$n;
    }

    $a=6;
    echo "{$a}的階乘爲:{$a}!=".digui($a);

結果爲:
結果:
分析執行過程

遞歸思想總結:
爲了解決一個“大”問題,根據現實邏輯,該問題可以通過比它小一級的同類問題的答案得到。小一級的問題又可以根據更小一級的問題的答案得到。以此類推,直到“最小一級問題”的答案是一個已經的。

遞歸思想圖例:
遞歸思想圖例


遞推思想(迭代思想):

遞推思想和遞歸思想很相似,都是需要知道“最小一級問題”的答案。
我們先來看遞推思想圖例:
遞推思想圖例

區別:
對比圖例後我們可以發現遞歸和遞推是有所差異的,遞推的整體思想是從小到大,而遞歸的整體思想是從大到小,再從小回到大。簡單說,遞推是更新變量的舊值,遞歸是在函數中調用函數自身。

舉例: 求斐波那契數列的第n項的值(遞推最經典的問題)
斐波那契數列的規律:1, 1, 2, 3, 5, 8, 13, 21…(最前的兩個數都爲1,從第3位開始,後面每位數爲前兩位數的和)

<?php
    function fbnq($n){
        $n1=1;//斐波那契數列第一項初始爲1
        $n2=1;//斐波那契數列第二項初始爲1
        $result=0;
        for($i=3,$i<=$n;++$i){
            $result=$n1+$n2;
            $n1=$n2;//更新舊值
            $n2=$result;//更新舊值
        }
        return $result; 
    }

    $a=fbnq(7);//求斐波那契數列第7個數
    echo "斐波那契數列第7項爲:".$a;

結果:
遞推舉例結果


遞歸和遞推思想總結:

  1. 很多問題,遞歸和遞推都能解決。
  2. 有些問題只能用遞歸。
  3. 如果兩種方法都能解決,推薦使用遞推,遞推的效率高。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章