递归对应二叉树,
http://dl2.iteye.com/upload/attachment/0088/5829/393f316f-8378-3ecf-915c-6fa29c299898.png
for循环里面的递归对应赋予二叉树不同根节点,递归的强大体现在起以二叉树形势进行遍历,并返回。当发现满足条件的节点继续向下遍历,看下面例子,一个全排列
import java.util.Scanner;
public class Dfs{
static int [] book=new int[10];
static int [] a=new int[10];
static Scanner s=new Scanner (System.in);
static void dfs(int step,int n)//step 表示当前在第几个位置
{
int i;
if(step==n+1)//如果step==n+1表示前n个数字已经放好
{
//输出一种全排列
for(i=1;i<=n;i++)
System.out.print(a[i]+"");
System.out.println();
return;
}
//每次搜索都从n-1 一一尝试
for(i=1;i<=n;i++)
{
if(book[i]==0)//判断次数字是否用过
{
a[step]=i;//存储当前位置的数字,以便满足条件输出
book[i]=1;//当前数字已用过,改变标志,以防重用
dfs(step+1,n);//放好当前位置数字之后,安排下一个数字
book[i]=0;//回溯,当满足一种全排列后,进行下一种尝试
}
}
return ;
}
public static void main(String[])r){
int n=s.nextInt();
dfs(1,n)
;
}
}
从中,我们可以看出for循环中的递归是为了给数组不同开始节点