问题:
出栈顺序模拟 求1到n个数的进栈出栈顺序一共有多少种
思路讲解:
此题采用递归思想, 用f(n,m)记录第i个数的进出栈情况.n用于表示等待进栈的数的个数,m为栈内已有的个数.将每一时刻分为有数进栈,没有数出栈或者没有数进栈有数出栈两种情况,采用f(n - 1, m + 1) + f(n, m - 1)递归,若n == 0则表示所有数已经进栈,那么出栈顺序只有一种不可控,若m == 0,则表示栈以空,需要return f(n - 1, 1)使数进栈.
代码实现:
import java.util.Scanner;
public class Main {
//出栈顺序模拟 求1到n个数的进栈出栈顺序一共有多少种
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt(); //所模拟数的个数
for (int i = 1; i < n; i++) {
System.out.println(i + " : " + f(i));
}
input.close();
}
public static int f(int n) {
return f(n, 0);
}
public stat