遞歸的含義:
????????就是一個函數(shù)內(nèi)部再調(diào)用該函數(shù)本身的一種情形繁堡,這是語法形式上的。
具體場景是:
????????如果要解決的“最終問題”彼绷,可以根據(jù)比該問題“小一級”的問題的答案而得到解決绊序,
并且,該“小一級”的問題夸盟,還可以根據(jù)比其“更小一級”的問題的答案而得到解決蛾方,
以此類推,直到“最小一級”的問題上陕。如果最小一級問題已知桩砰,則最終的問題也就解決了。
危險:
????????如果函數(shù)在執(zhí)行的過程中沒有一個“不再調(diào)用”的終結(jié)機(jī)制释簿,那么就會出現(xiàn)“停不下來”的現(xiàn)象亚隅。
原理:
????????要想得到最大(最終)問題(可以稱為n級)的答案,如果能得到n-1級的答案辕万,則可以“輕松算出”枢步;并且沉删,還能夠知道這些問題中的“最小一級”的答案渐尿。
則這種情況,就可以使用遞歸思想來解決:從最大一級開始矾瑰,一級一級往小的方向找砖茸。
遞歸調(diào)用過程的代碼演示;
function ? ?f1($n){
? ? ? ? ? ?$n++;
? ? ? ? ? ? echo ? " $n " ;
? ? ? ? ? ? if($n < 5){
? ? ? ? ? ? ? ? ? ? f1($n);
? ? ? ? ? ? }
? ? ? ? ? ? echo ?" $n " ;
}
f1(1);
輸出結(jié)果及分析:
舉例1:計算5的階乘
數(shù)學(xué)上階乘可以這樣來描述殴穴,一個數(shù)n的階乘凉夯,是n-1的階乘,乘以n的結(jié)果采幌!假設(shè)劲够,我們有一個函數(shù) fn(),它可以計算任意正整數(shù)n的階乘休傍;
舉例2:
計算斐波那契數(shù)列第10項的值:1, 1, 2, 3, 5, 8, 13, 21, ......
假設(shè)有個函數(shù)征绎,可以計算斐波那契數(shù)列的第n項: