首先简单看一下公式
公式就是若要求一个数,就把之前求出来的数,第一个乘以最后一个。
为什么可以这样就可以求出出栈情况数呢?
我们用递归的思想来看待。
这里我们作一个假设。我们会把n个数分成两部分来处理。就是必须等第一部分处理(栈内全部排空)完后,第二部分的数才能入栈,才能被处理。
那样我们就很容易写公式了,那如果1和n-1是独立的两部分。公式就是f(1)*f(n-1)
如果2和n-2是独立的两部分。公式就是f(2)*f(n-2)了
以此类推,就最终可以推到f(n-1)*f(1)
和我们的卡特蓝数的递推公式不谋而合。
有些人可能很奇怪,为什么可以这样思考?他可能会举这样一个反例,我们就不分开来处理,让栈一直保持不为空的状态,这样我是不是就无话可说了?
其实我想说,这样一种情况,不就是把n个数作为一个整体,0个数作为另一个整体吗?所以你的公式是这样的f(0)*f(n) f(0)我们显然可以知道是1。
其实让你求f(n)就是让你求f(n)*f(0)的意思。
所以我敢说,这样思考,绝对绝对可以涵盖所有的