遞迴最經典的例子就是:從前有座山,山里有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?「從前有座山,山里有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?『從前有座山,山里有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?……』」
遞迴需要幾個條件:
1,遞迴必須 要有邊界條件,也就是遞迴出口(退出遞迴)
2,遞迴前進段和遞迴返回段,也就是最後得到的值
3,當邊界條件(遞迴出口)不滿足時,遞迴前進;當邊界條件(遞迴出口)滿足時,遞迴返回。
舉個遞迴小例子,比如,
張三去和李四借錢,李四說你等一下,我去找王五借給你,
然後李四去找王五借錢,王五說你等一下,我去找趙六借給你,
最後王五找趙六借錢,趙六借給了王五。(這裡就是遞迴出口)
這裡有乙個規律就是最先執行的最後返回,比如張三去借錢,最後才會把錢給他。
傻瓜式理解遞迴,就是忘記遞迴,假設它的子問題已經解決,從上面的例子說就是假設李四已經有錢。
下面說乙個場景,斐波納契數列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144
已知前兩項的和,求第三項的和,因為重複用到這個方法,所以用到遞迴去解:
斐波那契數列的規律是當前項等於前兩項的和,得到的公式是f(n)=f(n-1)+f(n-2);這裡的n表示第幾項,上遞迴**:
這裡假設子問題已經解決,加入求第10項的值公式為:f(10)=f(9)+f(8)故而出現上面的公式
function
f($n)
return f($n-1)+f($n-2); // 假設子問題已經解function f($n)
return
$v;}
吃了一半,又多吃乙個!當到第十天時,只有乙個桃子了。問題,有幾個桃子?
第十天,只有乙個桃子,第九天就是(1+1)*2個桃子,假設子問題已經解決,f(1)=(f(2)+1)*2,第一天的桃子等於第二天桃子加1乘以2,上**:
/**
* 遞迴實現方法
*/function f($n=1)
return (f($n+1)+1)*2;
}
/**
* 用迭代的方法
*/function
f($n)
return
$v;}
echo f(1);
python遞迴怎麼理解 理解遞迴 python
幾個小例子來理解遞迴 一 先來一點基礎的認識 1 遞迴是乙個不斷的將乙個問題分成更小的子問題最終找到乙個簡單的基礎問題,最後再由基礎問題的解決逐步向上解決初始問題的過程。所以不難看出,遞迴其實是分為兩部分的乙個是向下的遞推過程,另乙個就是向上的回溯過程。2 從上面我們已不難發現,在這個過程中,是存在...
怎麼更好地終極理解遞迴演算法
遞迴真是個奇妙的思維方式。對一些簡單的遞迴問題,我總是驚嘆於遞迴描述問題和編寫 的簡潔。但是總感覺沒能融會貫通地理解遞迴,有時嘗試用大腦去深入 遞迴 層次較深時便常產生進不去,出不來的感覺。這種狀態也導致我很難靈活地運用遞迴解決問題。有一天,我看到一句英文 to iterate is human,t...
Lisp 理解遞迴
學習遞迴的學生有時會被鼓勵在紙上跟蹤遞迴函式的所有呼叫。這種練習可能會有誤導 程式設計師定義乙個遞迴函式的時候,通常不會考慮因為呼叫它而產生的所有呼叫。如果有人非得以這一的方式來考慮程式,那麼遞迴就是令人煩惱的,這可沒有什麼幫助。遞迴的好處是它的精確性,它讓我們以從更加抽象的方式來觀察演算法。你可以...