遞歸思想(遞歸函數):
遞歸思想的一個基本形式是在一個函數中,有至少一條語句,又會去調用該函數自身。(求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;
結果:
遞歸和遞推思想總結:
- 很多問題,遞歸和遞推都能解決。
- 有些問題只能用遞歸。
- 如果兩種方法都能解決,推薦使用遞推,遞推的效率高。