您可以简单地为此创建一个公式:
抛硬币 5 次且连续 3 次正面朝上的次数等于 5 次抛硬币的组合数减去至少连续 3 次正面朝上的组合数。在这种情况下:
HHH-- (4 combinations)
THHH- (2 combinations)
TTHHH (1 combination)
组合总数 = 2^5 = 32。而 32 - 7 = 25。
如果我们连续抛硬币 N 次,没有 Q 次正面朝上,总金额为 2^N,至少有 Q 次正面正面的金额为 2^(N-Q+1)-1。所以一般的答案是:
Flip(N,Q) = 2^N - 2^(N-Q+1) +1
当然也可以用递归来模拟总量:
flipme: N x N -> N
flipme(flipsleft, maxhead) = flip(flipsleft, maxhead, 0)
flip: N x N x N -> N
flip(flipsleft, maxhead, headcount) ==
if flipsleft <= 0 then 0
else if maxhead<=headcount then 0
else
flip(flipsleft - 1, maxhead, headcount+1) + // head
flip(flipsleft - 1, maxhead, maxhead) // tail