資料結構與演算法系列八(遞迴見面禮)

2022-07-18 03:03:12 字數 2521 閱讀 7590

有人說,資料結構與演算法,計算機網路,與作業系統都一樣,脫離日常開發,除了面試這輩子可能都用不到呀!

有人說,我是做業務開發的,只要熟練api,熟練框架,熟練各種中介軟體,寫的**不也能「飛」起來嗎?

於是問題來了:為什麼還要學習資料結構與演算法呢?

#理由一:

面試的時候,千萬不要被資料結構與演算法拖了後腿

#理由二:

你真的願意做一輩子crud boy嗎

#理由三:

不想寫出開源框架,中介軟體的工程師,不是好廚子

我想好了,還是需要學習資料結構與演算法。但是我有兩個困惑:

1.如何著手學習呢?

2.有哪些內容要學習呢?

學習方法推薦:

#學習方法

1.從基礎開始,系統化學習

2.多動手,每一種資料結構與演算法,都自己用**實現出來

3.思路更重要:理解實現思想,不要背**

4.與日常開發結合,對應應用場景

學習內容推薦:資料結構與演算法內容比較多,我們本著實用原則,學習經典的、常用的資料結構、與常用演算法

#學習內容:

1.資料結構的定義

2.演算法的定義

3.複雜度分析

4.常用資料結構

陣列、鍊錶、棧、佇列

雜湊表、二叉樹、堆

跳表、圖

5.常用演算法

遞迴、排序、二分查詢

搜尋、雜湊、貪心、分治

動態規劃、字串匹配

到目前為止,基於線性表的資料結構我們都看完了,簡單回顧一下,它們是:陣列、鍊錶、棧、佇列。這些資料結構是其它資料結構與演算法的基礎,需要重點關注。

這一篇開始,我們開啟演算法的列車了,請繫好安全帶!第乙個要看的演算法是:遞迴。遞迴這兩個字你一定很熟悉,有沒有?

如果沒有的話,我們先舉乙個例子。從2023年開始到如今,知識付費發展的如火如荼。如果你也是其中的一員,比如說在xx平台購買了xx課程。大多數平台都會告訴你,將你購買的課程分享出去,假如有人通過你分享的鏈結購買了該課程,那麼平台會給你佣金返現。

既然與錢有關係,那就比較麻煩了!對於平台來說,有這麼幾個問題需要搞清楚。比如說:1.誰是一級推薦人?

2.誰是二級推薦人......?

3.誰是最終推薦人?

因為不同級的推薦人,返現佣金的比例可不一樣,千萬別返錯了,對吧。關於這種類似求推薦人的問題,有請我們今天的主角登場,它就是:遞迴

#遞迴稍微有些複雜,我們通過兩篇來學習:

1.第一篇是見面禮:

1.1.體會兩個生活中的小案例 2

.第二篇是重頭戲:

2.1.詳細分析遞迴的實現

2.2.遞迴實現的注意事項

簡述:1.a在某某知識付費平台購買了課程:xx2.b通過a3.c通過b

4.以此類推下去......

5.假如以c為起點,如何求出課程:xx的最終推薦人?

6.假設資料庫中儲存的資料是這樣的:

求解:1.你肯定想到了,這個問題好簡單,經常寫如下類似這樣的**:

/**

* 求最終推薦人

*/public

string findrootrecommend(string userid,string xx)

//遞迴查詢

return

findrootrecommend(分享使用者id,xx);

}

簡述:1.你與女朋友正在電影院看電影,電影已經放映

2.突然,女朋友問你:我們坐在電影院的第幾排?

3.你一看,壞了:電影院一片漆黑,伸手不見五指

4.這個問題必須要回答,因為是女朋友問的,你該怎麼辦?

求解:1.別忘了,你是程式設計師,對於程式設計師來說,這個問題太簡單了

2.用遞迴:先問前一排的人,他們在第幾排?

3.前一排的人,再問他的前一排,在第幾排?

4.以此類推......

5.一直問到第一排的人,第一排不需要再問了,直接回答在第一排

6.第二排的人:在第一排的人基礎上 + 1

7.以此類推......

8.每一排都在前一排的基礎上 + 1,最後到了你們這一排,女朋友得到了滿意的答案

9.你很驕傲有沒有?用**回答,類似這樣:

public

int movies(int

n)

//遞迴向前一排詢問

return movies(n - 1) + 1;

}

資料結構與演算法系列九(遞迴詳解)

有人說,資料結構與演算法,計算機網路,與作業系統都一樣,脫離日常開發,除了面試這輩子可能都用不到呀!有人說,我是做業務開發的,只要熟練api,熟練框架,熟練各種中介軟體,寫的 不也能 飛 起來嗎?於是問題來了 為什麼還要學習資料結構與演算法呢?理由一 面試的時候,千萬不要被資料結構與演算法拖了後腿 ...

C 資料結構與演算法系列(八) 棧(Stack)

棧是乙個先入後出 filo first in last out 的有序列表 根據棧的定義可知,最先放入棧中的元素在棧底,最後放入的元素在棧頂,而刪除元素剛好相反,最後放入的元素最先刪除,最先放入的元素最後刪除 子程式的呼叫 在跳往子程式前,會先將下乙個指令的位址存入堆疊中,直到子程式執行完後再將位址...

C 資料結構與演算法系列(十三) 遞迴 迷宮問題

初始化地圖 n for int i 0 i map.length i system.console.writeline setway map,1,1 system.console.writeline n小球走過,並標識過的地圖情況 n for int i 0 i map.length i syste...