递归的深度理解(一)

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

 

posted @ 2018-11-29 22:47  DWVictor  阅读(2971)  评论(0)    收藏  举报