递归的深度理解(一)


总所周知,我们使用搜索以及许多算法,都要用到递归,递归的使用要弄明白并不难,但是想要理解搜索中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