递归练习
来源:互联网 发布:mac snow ball 编辑:程序博客网 时间:2024/05/29 04:46
递归练习
在n个球中,任意取m个(不放回),求有多少种不同取法
public class Main { //在n个球中,任意取m个(不放回),求有多少种不同取法。 public static int fun(int n, int m){ //如果3个球中取4个,返回0 if(n < m) return 0; //如果4个球中取4个,返回0 if(n == m) return 1; //如果4个球中取0个,返回1 if(m == 0) return 1; //假设n个球中有1个特殊球x,取法划分为:包含x和不包含x return fun(n-1, m-1) + fun(n-1, m); } public static void main(String[] args) { int sum = fun(10, 3); System.out.println(sum); }}
字符全排列
public class Main { /** * @param data 数组 * @param begin 当前交换位置 */ public static void fun(char[] data, int begin){ if(begin == data.length){ for(int i = 0; i<data.length; i++){ System.out.print(data[i]); } System.out.println(); } for(int i = begin; i < data.length; i++){ {char c = data[i]; data[i] = data[begin]; data[begin] = c;} fun(data, begin+1); {char c = data[i]; data[i] = data[begin]; data[begin] = c;} } } public static void main(String[] args) { char[] data = "ABCDE".toCharArray(); fun(data, 0); }}
两字符串求公共子字符最大个数
public class Main { public static int fun(String str1, String str2){ if(str1.length() == 0 || str2.length() == 0){ return 0; } if(str1.charAt(0) == str2.charAt(0)){ return fun(str1.substring(1), str2.substring(1)) + 1; }else{ return Math.max(fun(str1.substring(1), str2), fun(str1, str2.substring(1))); } } public static void main(String[] args) { int n = fun("abcd", "bacd"); System.out.println(n); }}
翻转串
publiv static void reversrString(String x){ if(x==null || x.length()<2){ return x; } return reversrString(x.subString(1)) + x.charAt(0);}
杨辉三角
public class Main { //计算第M层的第N个系数的计算方法 public static int fun(int m, int n){ //顶点1 if(m == 0){ return 1; } //每行两边的1 if(n == 0 || n == m){ return 1; } //中间位置数 return fun(m-1, n-1) + fun(m-1, n); } public static void main(String[] args) { for(int i = 0; i<10; i++){ for(int j = 0; j<=i; j++){ System.out.print(fun(i, j)); } System.out.println(); } }}
字母组合问题
public class Main { static int fun(int m, int n){ if(m == 0 && n == 0){ return 0; } if(m == 0 || n == 0){ return 1; } //A开头和B开头 return fun(m-1, n) + fun(m, n-1); } public static void main(String[] args) { System.out.println(fun(10,10)); }}
整数n的加法所有划分
public class Main { /** * @param n * @param a * @param k */ //数字分解 static void fun(int n, int[] a, int k){ if(n <= 0){ for(int i = 0; i < k; i++){ if(i == k-1){ System.out.print(a[i]); }else{ System.out.print(a[i] + "+"); } } System.out.println(); return; } for(int i = n; i > 0; i--){ if(k > 0 && i > a[k-1]) continue; //将每行的开始数字存入0下标的位置 例如:6,5,4,3,2,1 a[k] = i; //将剩余部分,在进行分解 fun(n-i, a, k + 1); } } public static void main(String[] args) { int[] a = new int[100]; fun(6, a, 0); }}
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:00000,00001,00010,00011,00100
public class Main { public static void fun(String str){ if(str.length() == 5){ System.out.println(str); return; } fun(str + "0"); fun(str + "1"); } public static void main(String[] args) { String str = ""; fun(str); }}
2的次幂表示
问题描述
任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。
将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0
现在约定幂次用括号来表示,即a^b表示为a(b)
此时,137可表示为:2(7)+2(3)+2(0)
进一步:7=2^2+2+2^0 (2^1用2表示)
3=2+2^0
所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:1315=2^10+2^8+2^5+2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
import java.util.Scanner;public class Main { public static void fun(int n){ if(n == 0){ System.out.print("0"); return; } String er = Integer.toBinaryString(n); char data[] = er.toCharArray(); boolean flag = false; for(int i = 0; i < data.length; i++){ if(data[i] == '1'){ if(flag){ System.out.print("+"); } flag = true; if(data.length - i - 1 == 1){ System.out.print("2"); }else{ System.out.print("2"); System.out.print("("); fun(data.length - i - 1 ); System.out.print(")"); } } } } public static void main(String[] args) { Scanner read = new Scanner(System.in); int n = read.nextInt(); boolean flag = false; String er = Integer.toBinaryString(n); char data[] = er.toCharArray(); for(int i = 0; i < data.length; i++){ if(data[i] == '1'){ if(flag){ System.out.print("+"); } flag = true; if(data.length - i - 1 == 1){ System.out.print("2"); }else{ System.out.print("2"); System.out.print("("); fun(data.length - i - 1 ); System.out.print(")"); } } } }}
0 0
- 递归练习
- 递归练习
- 递归 练习
- 递归练习
- 递归练习
- 递归练习
- 递归练习
- 递归练习
- 递归练习
- 递归练习
- 递归小练习
- 递归的练习
- C语言递归练习
- 练习:递归求和
- 练习递归小例子
- 递归SQL练习
- 算法之递归练习
- 递归基础练习
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(二)
- 敏感词过滤,PHP实现的Trie树
- java采用 java.util.Properties类读取.properties配置文件
- DenseBox: Unifying Landmark Localization with End to End Object Detection
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- 递归练习
- Java 网络学习
- 敏感词检测
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)
- 中华武术
- 想学习做产品
- JAVA 按年月打印日历 Calendar的简单使用
- Wget:Windows下安装wget
- Couldn't find leader offsets for Set news_topic