遞歸的深度理解(一)


總所周知,我們使用搜索以及許多算法,都要用到遞歸,遞歸的使用要弄明白並不難,但是想要理解搜索中dfs的使用就要理解一番,

以如下代碼為例:

void dfs(int x,int step,int s)
{
//限制條件1,當步數相等時,即返回;
//即有一個條件,來限制;
//dfs的核心
if(step==cnt) { ans=min(s,ans); return ; }
//剪枝1;不具體介紹了
//減少復雜度的重中之重
if(s>ans) return ;
//dfs中的具體實現過程
for(int i=1;i<=cnt;i++) { if(vist[i]) continue ; vist[i]=1;
/*重點講下搜索中筆者對遞歸的理解
dfs使用遞歸,即遞歸定義,自己調用自己;
當你進入dfs函數中,即類進入新的函數;
當函數結束時或是達到限定條件時就返回;
即如 此函數,若是結束就for循環找下一個結點;
直到找完所有結點;記錄下最小的s;
當然若是只要求找到結點,未要求最小,便可添加條件,用bool判斷,當找到令其為true;
即為判斷條件,退出搜索;
遞歸結束;
講的比較啰嗦,主要是為了能夠用程序思維去編寫算法題來理解做准備;
*/ dfs(i,step
+1,s+dis[x][i]); vist[i]=0; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM