- 遞歸:
關於遞歸的理解:
package practise;
/**
- 關於遞歸的實際理解
- @author Viaxiz
*/
public class Dugui2 {
public static void f(int n) {
if(n>0) {
f(n-1);
System.out.println(n);
f(n-1);
}
}//遞歸就是把自己當作語句調用,所以爲了完成語句的執行,其後面必然會出來的,想想棧的原理,先進後出,最開始調用的方法即最後一次執行的方法
//因爲執行遞歸語句後還要執行遞歸語句剩下的
public static void main(String[] args) {
f(3);
}
}
陳越姥姥講遞歸:
重點:
- 出口在哪
- 遞推性(相似性)
a. 相似而規模逐漸變小,以參數體現
b. 若沒有明顯的相似性,就需要主動構造
a) 關於遞歸,記得從最開始先一步一步地推,找出其中的規律(關係)
例如:
漢諾塔
黑白球:
輸出逆序字符串
整數劃分
關於遞歸總給我以下感覺:
- 找規律
- 判定條件;
a. return
b.注意兩個或多個變量值傳入,其中的有些值是要相應變化的
深搜最重要的就是正確表示狀態
如,部分和的問題:
部分和的這個問題……我沒寫出來…
李白打酒這題…也太…那啥了~
代碼示例:
關於六角形的問題,哈哈哈哈哈哈哈哈哈哈哈~,全排列大法好啊!!!一次過。
但是我們也還是看看深搜的解法吧
核心代碼:
關於深搜和廣搜:
深搜是用遞歸來實現的,其好像棧一樣,唐劍梅老師的PPT上關於這個遞歸的調用用棧的形式完全地表現了出來,很有意義;
廣搜主要使用隊列來實現的,先進先出的原則,其形象的過程在PPT上也有展示
講道理:
簡單理解,廣搜和暴力有啥區別啊?多了隊列和剪枝??
暴力枚舉,搜索狀態。
記住在Java中的String的用法:
new String(char data[])
String c; c.tocharArray();
String s=“dafafa”;
System.out.println(s.substring(2)+s.charAt(0));
輸出:
深搜在判斷不是最終結果後,其執行的其實是接下來的狀態語句
如,接下來的狀態用循環表示:
以及不用循環表示的情況:
關於遞推:
參考鏈接https://www.cnblogs.com/skyme/p/3541863.html
當n=1:
當n=2:有7種走法,也就是綠色線條的數量
當n=3:
同樣的道理,至於兩個點的,我們只需要將減去三個點的即得到兩個點的情況了。
所以得到遞推的關係式爲:
關於Java中的容器
順勢感嘆一波這段時間過得太快了啊,從開年到現在,從準備完藍橋杯到現在,時間真的好快好快啊!少年回頭看,笑我還不快跟上!!!