递归的深度理解
Posted DWVictor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归的深度理解相关的知识,希望对你有一定的参考价值。
总所周知,我们使用搜索以及许多算法,都要用到递归,递归的使用要弄明白并不难,但是想要理解搜索中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;
以上是关于递归的深度理解的主要内容,如果未能解决你的问题,请参考以下文章