问题描述
代码演示
import java.util.Scanner;
/**
* 输入3,10 输出120
* 即:10*9*8/3/2/1 = 120
*
* @author Clearlight
*
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
int n = sc.nextInt();
System.out.println(f(k,n));
}
public static int f(int k, int n) {
if(k==0 || k==n) {
return 1;
}
return f(k,n-1) + f(k-1,n-1);
}
}
代码分析
在写这道题时,之前看了几节关于递归的讲解,写起来很简单。
根据给的提示的那张图片便可以根据它来写出递归的公式以及条件。
思路:
找重复:C(k,n)=C(k,n-1)+C(k-1,n-1),求C(k,n-1)和C(k-1,n-1)是原问题的重复(规模更小)-子问题
找变化:变化的量应该作为参数(k和n一直在变化)
找边界:出口(k=0或k=n)
根据这三个条件即可写出一个完整的递归.
另外,几个关于递归的练习,可以看看:
递归的实例-Java