深刻理解遞歸算法javascript
人理解迭代,神理解遞歸java
遞歸與循環的區別算法
遞歸:你打開面前這扇門,看到屋裏面還有一扇門(這門可能跟前面打開的門同樣大小(靜),也可能門小了些(動)),你走過去,發現手中的鑰匙還能夠打開它,你推開門,發現裏面還有一扇門,你繼續打開,。。。, 若干次以後,你打開面前一扇門,發現只有一間屋子,沒有門了。 你開始原路返回,每走回一間屋子,你數一次,走到入口的時候,你能夠回答出你到底用這鑰匙開了幾扇門。code
循環:你打開面前這扇門,看到屋裏面還有一扇門,(這門可能跟前面打開的門同樣大小(靜),也可能門小了些(動)),你走過去,發現手中的鑰匙還能夠打開它,你推開門,發現裏面還有一扇門,(前面門若是同樣,這門也是同樣,第二扇門若是相比第一扇門變小了,這扇門也比第二扇門變小了(動靜如一,要麼沒有變化,要麼一樣的變化)),你繼續打開這扇門,。。。,一直這樣走下去。 入口處的人始終等不到你回去告訴他答案。遞歸
模型一: 在遞去的過程當中解決問題ip
function recursion(大規模){ if (end_condition){ // 明確的遞歸終止條件 end; // 簡單情景 }else{ // 在將問題轉換爲子問題的每一步,解決該步中剩餘部分的問題 solve; // 遞去 recursion(小規模); // 遞到最深處後,不斷地歸來 } }
模型二: 在歸來的過程當中解決問題it
function recursion(大規模){ if (end_condition){ // 明確的遞歸終止條件 end; // 簡單情景 }else{ // 先將問題所有描述展開,再由盡頭「返回」依次解決每步中剩餘部分的問題 recursion(小規模); // 遞去 solve; // 歸來 } }
/** * 關於 遞歸中 遞進和迴歸的理解 * @param n */ public static void recursion_display(int n) { int temp=n;//保證先後打印的值同樣 System.out.println("遞進:" + temp); if (n > 0) { recursion_display(--n); } System.out.println("迴歸:" + temp); }