车队入栈问题
【题目】编号为 1,2…n 的一个车队,从右向左行驶。道路只能容一辆车通过,无法超车。
中间有个死胡同,作为检查站。所有经过车辆必需入站检查。也可能进行很复杂检查,也可能不检查,入站后,马上出站继续上左边的路行驶。检查站容量很大,且也是单车道。
求这n辆车最后在左边道路上的排列有多少种可能。
分析:
如果是 1 辆车,当然只 1 种可能。2 辆车则 2 种。
现在考虑 3 辆车的情况。如果没有检查站,则有 6 种排列可能。
加了检查站后,就不是所有情况都可能了。
比如: 312 就不可能。
因为,如果 3 号车先出来,1,2 号肯定在站里。那么它们的顺序就不是任意了。
此问题看似复杂,换个角度就容易多了。
用递归的思考方法。
设 f(m,n) 表示右边有 m 辆车,站内有 n 辆车。它表示当前的状态。
在此状态下,下一步的操作最多只有两种可能:
- 右边一辆车开入站中。
- 站中一辆车开出到左边。
### 车队入栈问题
def che_dui(n):
def f(x,y): ## 右边有x辆,栈中有y辆
if x==0: return 1