import java.util.*;classMain{staticint n;publicstaticvoidmain(String[] args){
Scanner sc =newScanner(System.in);
n = sc.nextInt();dfs(0,0);}publicstaticvoiddfs(int u,int state){if(u==n){for(int i =0; i < n; i++){if((state >> i &1)!=0){
System.out.print(i+1+" ");}}
System.out.println();return;}dfs(u+1,state);dfs(u+1,state|1<< u);}}
import java.util.*;classMain{staticint n;staticboolean[] st =newboolean[20];publicstaticvoidmain(String[] args){
Scanner sc =newScanner(System.in);
n = sc.nextInt();dfs(1);}publicstaticvoiddfs(int u){if(u>n){for(int i =1; i <= n; i++){if(st[i]){
System.out.print(i+" ");}}
System.out.println();return;}
st[u]=true;dfs(u+1);
st[u]=false;dfs(u+1);}}
递归实现排列型枚举
import java.util.*;classMain{staticint n ;staticboolean[] st =newboolean[10];staticint[] arr =newint[10];publicstaticvoidmain(String[] args){
Scanner sc =newScanner(System.in);
n = sc.nextInt();dfs(0);}publicstaticvoiddfs(int u){if(u==n){for(int i =0; i < n; i++){
System.out.print(arr[i]+" ");}
System.out.println();return;}for(int i =1; i <= n; i++){if(!st[i]){
arr[u]= i;
st[i]=true;dfs(u+1);
st[i]=false;}}}}
递归实现组合型枚举
import java.util.*;classMain{staticint n,m;staticint[] path =newint[30];publicstaticvoidmain(String[]args){
Scanner sc =newScanner(System.in);
n = sc.nextInt();
m = sc.nextInt();dfs(0,1);}staticvoiddfs(int u,int cnt){if(u==m){for(int i =0; i < m; i++){
System.out.print(path[i]+" ");}
System.out.println();}else{for(int i = cnt; i <= n; i++){
path[u]= i;dfs(u+1,i+1);}}}}