递归算法的两道例题
来源:互联网 发布:韩语自学软件app 编辑:程序博客网 时间:2024/05/22 13:39
1.排列问题
将集合x的全排列记为Perm(x)。riPerm(x)表示在全排列Perm(x)前面加一个ri前缀。所以集合R的全排列递归的定义为:
if n=1 Perm(R) = (r) 其中r是集合R中的唯一的元素
if n>1 Perm(R) 由(r1)Perm(R1),(r2)Perm(R2),(r3)Perm(R3).。。。(rn)Perm(Rn);
import java.io.OutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.StringTokenizer;import java.io.IOException;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.InputStream;import java.util.*;public class Main { public static void main(String []args){ InputStream inputStream = System.in; OutputStream outputStream = System.out; InputReader in = new InputReader(inputStream); PrintWriter out = new PrintWriter(outputStream); Task solver=new Task(); solver.solve(1,in,out); out.close(); } static class Task{ public void solve(int testnumber,InputReader in,PrintWriter out){ int n = in.nextInt(); int [] list = new int [n]; for(int i=0;i<n;i++){ list[i]=i+1; } Perm(list,0,n-1,out); } private void Perm(int []list,int k,int m,PrintWriter out){ if(k==m){ for(int i=0;i<=m;i++){ out.print(list[i]+" "); } out.println(""); } else { for(int i=k;i<=m;i++){ int t=list[k]; list[k]=list[i]; list[i]=t; Perm(list,k+1,m,out); t=list[k]; list[k]=list[i]; list[i]=t; } } } } static class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = null; } public String next() { while (tokenizer == null || !tokenizer.hasMoreTokens()) { try { tokenizer = new StringTokenizer(reader.readLine()); } catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } }}
2.整数划分问题
将一个正整数表示成一系列正整数之和,
n = n1+n2+n3+n4+n5+….+nk(其中n1>=n2>=n3>=…..nk>=1,k>=1)
在正整数所有不同划分中,将最大加数n1不大于m的划分个数记为q(n,m),对q(n,m)建立递归关系
q(n,1) = 1,n>=1;
q(n,m)=q(n,n),m>=n;
q(n,n)=1+q(n,n-1)
q(n,m)=q(n,m-1)+q(n-m,m);
import java.io.OutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.StringTokenizer;import java.io.IOException;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.InputStream;import java.util.*;public class Main { public static void main(String []args){ InputStream inputStream = System.in; OutputStream outputStream = System.out; InputReader in = new InputReader(inputStream); PrintWriter out = new PrintWriter(outputStream); Task solver=new Task(); solver.solve(1,in,out); out.close(); } static class Task{ public void solve(int testnumber,InputReader in,PrintWriter out){ int n = in.nextInt(); out.println(q(n,n)); } private int q(int n,int m){ if(n<1 || m<1){ return 0; } if((n==1) || (m==1)){ return 1; } if(n<m){ return q(n,n); } if(n==m){ return q(n,m-1)+1; } return q(n,m-1)+q(n-m,m); } } static class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = null; } public String next() { while (tokenizer == null || !tokenizer.hasMoreTokens()) { try { tokenizer = new StringTokenizer(reader.readLine()); } catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } }}
阅读全文
0 0
- 浅谈递归算法的两道例题
- 递归算法的两道例题
- 几道典型的递归算法例题
- 递归算法 例题
- 递归算法经典例题
- 【典型例题】遍历文件夹下面的文件;(递归算法)
- 组合的两种递归算法
- 递归的概念和例题。
- 递归的好处,递归的运用例题
- 【算法】递归(recursion)+经典例题个人分析
- 递归例题
- 用一道例题来分享两种匹配字符串的算法!
- 用一道例题来分享两种匹配字符串的算法!
- 逆序的两种算法 递归和常规
- 两两组合算法-递归实现方法
- 一个CTE递归的经典例题
- KM算法的几个例题
- 动态规划 与两道例题
- photoshop文字使用技巧
- 会提问的测试人员,到底价值多少?
- UX、UI、 IA和IxD
- 持续集成工具集之四 Jenkins+Maven+Git+Tomcat 项目构建和自动部署
- 求出0~999之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3 ? ,则153是一个“水仙花数”。
- 递归算法的两道例题
- C++之 .h 与 .cpp详解
- 简述一下extern "C"的小作用
- 速达财务S V6.42 财务管理软件网络版完美破解
- Android facing front camera and facing back camera setting in HAL
- linux top命令VIRT,RES,SHR,DATA的含义
- linux 安装mongodb
- Ahoi2005 洗牌 扩展欧几里得
- 关于kindeditor编辑器在jsp中把图片上传路径改为绝对路径