//从m个球中取n个
// 由于这个问题很难找相似性,需要自己造一个相似性出来
// 设其中一个球是特殊的,分两种情况:一种:取它;另一种:不取它
public class Main {
public static int f(int m,int n){
if(m==n){ //f(m-1,n)这种情况的出口
return 1;
}
if(n==0){ //f(m-1,n-1)这种情况的出口:当取完最后一个时,就完成一种取法
return 1;
}
return f(m-1,n)+f(m-1,n-1); //相似性:设其中一个球是特殊的,分两种情况:一种:取它;另一种:不取它
}
public static void main(String[] args) {
System.out.println(f(4,3));
}
}
import java.util.List;
import java.util.Vector;
/* 固定数组的组合问题
从“ABCDEF”中取3个
用递归算法*/
//递归思路:如何取第一个?
public class Main2 {
public static List f(String s, int n) {
List lst=new Vector();
if(n==0){
lst.add("");
return lst;
}
for (int i = 0; i < s.length(); i++) {
char x = s.charAt(i);
List l=f(s.substring(i+1), n - 1);
for(int k=0;k<l.size();k++){
lst.add(""+x+l.get(k));
}
}
return lst;
}
public static void main(String[] args) {
// System.out.println(f("ABCDEF",3));
List lst=f("ABCDEF",3);
for(int i=0;i<lst.size();i++){
System.out.println(lst.get(i));
}
}
}