資料結構與演算法讀書筆記 - 004 -C++遞迴
————————————————————
遞迴的例子
————————————————————
————————————————————
排序的原理:
1)所以把每個元素都放在開頭一次,所以把每個元素都提出來一次
2)剩下的元素按所有可能排序
{
剩下的元素,1)所以把每個元素都提出來一次
2)剩下的元素按所有可能排序
{…}
3)然後把剛才提出來的那個元素放在每一種可能的開頭
}
3)然後把剛才提出來的那個元素放在每一種可能的開頭
這就是像模像樣的遞迴了,不過因為要實現“每一個元素一次”,所以要有for迴圈的過程
————————————————————
硬編碼
vector<int> vec = { 1,2,3 };
for (int i = 0; i < 3; ++i)
{
std::swap(vec[0], vec[i]);
for (int i = 0; i < 2; ++i)
{
std::swap(vec[1], vec[i + 1]);
for (auto i : vec)
cout << i;
cout << endl;
std::swap(vec[i + 1], vec[1]);
}
std::swap(vec[i], vec[0]);
}
結果
123
132
213
231
321
312
————————————————————
函式版本
void permutation(vector<int> vec, int k, int m)
{
if (k == m)
{
for (auto i : vec)
cout << i << " ";
cout << endl;
}
else
{
for (int i = 0; i < (m - k); ++i)
{
std::swap(vec[k], vec[i+k]);
permutation(vec, k + 1, m);
std::swap(vec[i+k], vec[k]);
}
}
}
使用
vector<int> vec = { 1,2,3,4 };
permutation(vec, 0, vec.size());
輸出
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 3 2
1 4 2 3
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 3 1
2 4 1 3
3 2 1 4
3 2 4 1
3 1 2 4
3 1 4 2
3 4 1 2
3 4 2 1
4 2 3 1
4 2 1 3
4 3 2 1
4 3 1 2
4 1 3 2
4 1 2 3
————————————————————
參考 / 讀書筆記讀的書:
————————————————————
C++ Primer(第五版)ISBN 978-7-121-15535-2
資料結構,演算法與應用:C++語言描述(第二版)ISBN 978-7-111-49600-7
2020.12.26更新
相關文章
- 資料結構與演算法:遞迴資料結構演算法遞迴
- 【Java資料結構與演算法筆記(二)】樹的四種遍歷方式(遞迴&非遞迴)Java資料結構演算法筆記遞迴
- 資料結構與演算法(十一)——演算法-遞迴資料結構演算法遞迴
- 資料結構與演算法學習總結--遞迴資料結構演算法遞迴
- Java資料結構與演算法--遞迴和回溯Java資料結構演算法遞迴
- 【演算法圖解】讀書筆記:第3章 遞迴演算法圖解筆記遞迴
- 資料結構學習筆記-遞迴求解森林高度資料結構筆記遞迴
- 資料結構和演算法:遞迴資料結構演算法遞迴
- 《Hbase原理與實踐》讀書筆記——2.基礎資料結構與演算法筆記資料結構演算法
- 資料結構-遞迴資料結構遞迴
- 資料結構與演算法——歸併排序: 陣列&連結串列&遞迴&非遞迴解法全家桶資料結構演算法排序陣列遞迴
- 《資料結構與演算法之美》資料結構與演算法學習書單 (讀後感)資料結構演算法
- 《Spring實戰》讀書筆記 #每日筆記 100-004Spring筆記
- 《Python 簡明教程》讀書筆記系列四 —— 資料結構Python筆記資料結構
- 資料結構5_遞迴資料結構遞迴
- 前端學習 資料結構與演算法 快速入門 系列 —— 遞迴前端資料結構演算法遞迴
- 資料結構與演算法-學習筆記(二)資料結構演算法筆記
- 資料結構與演算法-學習筆記(16)資料結構演算法筆記
- 資料結構與演算法學習筆記01資料結構演算法筆記
- 資料結構與演算法課程筆記(二)資料結構演算法筆記
- 基礎資料結構之遞迴資料結構遞迴
- 資料結構和演算法面試題系列—遞迴演算法總結資料結構演算法面試題遞迴
- 《Effective C++》讀書筆記C++筆記
- C++讀書筆記:字串C++筆記字串
- 《讀書與做人》讀書筆記筆記
- MySQL 讀書筆記 (一) 體系結構MySql筆記
- 資料結構和演算法——遞迴-八皇后問題(回溯演算法)資料結構演算法遞迴
- 資料結構:歸併排序(非遞迴)資料結構排序遞迴
- 《JavaScript資料結構與演算法》筆記——第3章 棧JavaScript資料結構演算法筆記
- 《JavaScript資料結構與演算法》筆記——第6章 集合JavaScript資料結構演算法筆記
- 大二上 資料結構與演算法筆記 20241024資料結構演算法筆記
- 資料結構與演算法分析學習筆記(四) 棧資料結構演算法筆記
- 《演算法筆記》2.4小節——C/C++快速入門->迴圈結構演算法筆記C++
- JVM讀書筆記之java記憶體結構JVM筆記Java記憶體
- 《重構》讀書筆記筆記
- C#資料結構與演算法系列(十四):遞迴——八皇后問題(回溯演算法)C#資料結構演算法遞迴
- C++ 學習筆記(2):String、遞迴、排序C++筆記遞迴排序
- 演算法與資料結構——選擇排序(c++)演算法資料結構排序C++