递归与递推一
Posted 猪八戒1.0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归与递推一相关的知识,希望对你有一定的参考价值。
目录
递归实现指数型枚举
题目描述
分析:
所有可能,只会选与不选
代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static int n;
static int []st=new int [16];//用来存状态1表选上0表没选上
public static void main(String[] args) throws IOException
n=Integer.parseInt(br.readLine());
dfs(1);
private static void dfs(int u)
if(u>n)
for(int i=1;i<=n;i++)
if(st[i]==1)
System.out.print(i+" ");
System.out.println();
else
//不选
st[u]=2;
dfs(u+1);
st[u]=0;
//选
st[u]=1;
dfs(u+1);
st[u]=0;
递归实现排列型枚举
题目:
分析:
用个布尔型数组记录是否枚举,再存下来记录即可
代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*
* boolean全局默认false
* int 全局默认0局部默认随机
*/
public class Main
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static int N=10;
static int n;
static boolean []used=new boolean [N];//用来存状态是否被使用
static int []st=new int [N];//用来存状态
public static void main(String[] args) throws IOException
n=Integer.parseInt(br.readLine());
dfs(1);
public static void dfs(int u)
if(u>n)
for(int i=1;i<=n;i++)
System.out.print(st[i]+" ");
System.out.println();
else
for(int j=1;j<=n;j++)
//没有被使用
if(!used[j])
used[j]=true;
st[u]=j;
dfs(u+1);
//恢复状态
used[j]=false;
st[u]=0;
递归实现组合型枚举
题目
分析:
这种n个数选m个数的全排列需要dfs两个参数
代码:
/*
* 要实现不重复就要保证每次选择的数比前一次大
* 真的狗
*/
import java.util.Scanner;
public class Main
static int n,m;
static int way[];
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
way=new int[m+1];
dfs(1,1);
private static void dfs(int u, int start)
/*
* 剪枝 排除一些不可能的情况 可以提升速度
* 比如n=5,m=3,第一个是4或者5的都要排除
* 选第u个数,说明已经选了u-1个数
* 从start开始说明还可以选n-start+1个数
* 如果u-1+n-start+1<m说明不够选
* return提前退出
*/
if((u-1+n-start+1)<m) return;
if(u>m)
for(int i=1;i<=m;i++)
System.out.print(way[i]+" ");
System.out.println();
return;//真狗
for(int j=start;j<=n;j++)
way[u]=j;
dfs(u+1, j+1);
way[u]=0;
以上是关于递归与递推一的主要内容,如果未能解决你的问题,请参考以下文章