思想:找出递归表达式,就可以解决了,就是将n个元素划分成由m个非空子集构成的集合 = 将n-1个元素划分成m个非空子集合,另一个元素插入 + 将n-1个元素划分成m-1非空子集构成的集合,另一个元素作为一个集合。
递归出口是n==m 或 m == 1时, f(n,m) = 1
import java.util.Scanner; public class Collection1 { public static int f(int n, int m){ if(m==1 || m==n){ return 1 ; } return m*f(n-1, m) + f(n-1, m-1) ; } public static void main(String[] args) { Scanner input = new Scanner(System.in) ; int n = input.nextInt() ; int sum = 0 ; for(int m=1; m<=n; m++){ sum += f(n, m) ; } System.out.println(sum); } }
import java.util.Scanner; public class Collection2 { public static int f(int n, int m){ if(m==1 || n==m){ return 1 ; } return m*f(n-1, m) + f(n-1, m-1) ; } public static void main(String[] args) { Scanner input = new Scanner(System.in) ; int n = input.nextInt() ; int m = input.nextInt() ; System.out.println(f(n,m)); } }