遞迴和分治思想及其應用

2021-08-23 12:01:06 字數 1138 閱讀 7663

目錄

更多:

如果可以使用迭代,盡量別使用遞迴。由編譯原理可以知道,每次自呼叫的時候,計算機都需要儲存在呼叫,浪費時間空間。當然,迭代是當我們知道迴圈次數的時候。而當我們不知道迴圈次數,比如說對於資料夾和檔案進行遍歷,不知道深度的情況下,我們就需要遞迴來實現。顯然,遞迴是先解決小的問題,這種思想是分治思想。根據具體需求,來決定是否使用遞迴。

遞迴要注意:

#includeusing namespace std;

void print()

}int main()

首先我們假設需要移動64層,那麼思路如下(附截圖):

此時,需要解決兩個問題(附截圖):

一直這樣類推,知道最後從begin(開始柱子)->end(目標柱子)。

按照第一張截圖,我們可以寫出來函式裡面else的遞迴部分。並且,每次輸出的時候,就對應著思路裡面的移動(而不是分治),此時step步數需要加+。

#include#includeusing namespace std;

void hanoi(int num,char begin,char by,char end,int &step);

int result = 0;

void print(){

for(int i=0;i=0 && j>=0;--i,--j)

if(queens[i][j]==1)

return false;

for(int i=row-1,j=col+1;i>=0 && j毫無疑問,遞迴以及分治思想還有很多用法:斐波那契數列、快速排序、檔案查詢、字典樹的建立等等。理論上遞迴可以解決任何問題,而作為我們只需要提供思路,其他的交給計算機解決。所以聽人說過計算機最適合解決遞迴問題。但是,有利有弊,遞迴同樣會消耗更多的記憶體。在初步實現階段,將大問題分而治之,分裝成遞迴函式,還是邏輯**化的最佳表達。

遞迴和分治思想及其應用

更多 如果可以使用迭代,盡量別使用遞迴。由編譯原理可以知道,每次自呼叫的時候,計算機都需要儲存在呼叫,浪費時間空間。當然,迭代是當我們知道迴圈次數的時候。而當我們不知道迴圈次數,比如說對於資料夾和檔案進行遍歷,不知道深度的情況下,我們就需要遞迴來實現。顯然,遞迴是先解決小的問題,這種思想是分治思想。...

遞迴和分治思想及其應用

目錄更多 如果可以使用迭代,盡量別使用遞迴。由編譯原理可以知道,每次自呼叫的時候,計算機都需要儲存在呼叫,浪費時間空間。當然,迭代是當我們知道迴圈次數的時候。而當我們不知道迴圈次數,比如說對於資料夾和檔案進行遍歷,不知道深度的情況下,我們就需要遞迴來實現。顯然,遞迴是先解決小的問題,這種思想是分治思...

遞迴和分治思想(折半查詢)

1 遞迴 歸去來兮 遞迴效率較低,如果明確知道迭代次數,則能用迭代最好用迭代,遞迴是函式自己呼叫自身,每次呼叫都需要入棧等操作。但是遞迴操作要比迭代簡單和清楚。遞迴函式的優點是定義簡單,邏輯清晰。理論上,所有的遞迴函式都可以寫成迴圈的方式,但迴圈的邏輯不如遞迴清晰。使用遞迴函式需要注意防止棧溢位。在...