@markr,
Although I don't code in Python, I have Python installed on my machine. It runs in well under a minute. Also, I printed old_branches for each of the first few card_numbers:
1 0 0
[[1, [], 1]]
2 0.0588235294118 0.0588235294118
[[1, [1], 0.94117647058823528]]
3 0.0564705882353 0.1152941176471
[[1, [1, 1], 0.82823529411764707],
[2, [1], 0.056470588235294113]]
4 0.0530132052821 0.1683073229292
[[1, [1, 1, 1], 0.67611044417767108],
[1, [1, 2], 0.050708283313325324],
[2, [1, 1], 0.10141656662665066],
[2, [2], 0.0034573829531812724]]
5 0.0497959183673 0.2181032412965
[[1, [1, 1, 1, 1], 0.50708283313325331],
[1, [1, 1, 2], 0.12677070828331333],
[1, [2, 2], 0.0031692677070828332],
[2, [1, 1, 1], 0.12677070828331333],
[2, [1, 2], 0.015846338535414166],
[3, [1, 1], 0.0021128451380552217],
[3, [2], 0.00014405762304921967]]
6 0.0467778600802 0.2648811013767
[[1, [1, 1, 1, 1, 1], 0.34524788638859799],
[1, [1, 1, 1, 2], 0.19420193609358638],
[1, [1, 1, 3], 0.0017981660749406142],
[1, [1, 2, 2], 0.016183494674465532],
[1, [2, 3], 0.00013486245562054606],
[2, [1, 1, 1, 1], 0.12946795739572425],
[2, [1, 1, 2], 0.040458736686163829],
[2, [1, 3], 0.00026972491124109213],
[2, [2, 2], 0.0010114684171540957],
[3, [1, 1, 1], 0.0053944982248218436],
[3, [1, 2], 0.00094403718934382263],
[3, [3], 6.1301116191157308e-006]]
I see now what you're doing with the branches. I haven't checked out the probability calculation, but I don't doubt that it is correct. Great job! Check out projecteuler.net.