<p>用<a href="https://en.wikipedia.org/wiki/Binomial_coefficient" rel="nofollow noreferrer">binomial coefficient</a>计算帕斯卡三角形的每个元素。这个值通常被称为<code>nCr</code>,它询问“给定的<code>n</code>项您可以用多少种方式<code>C</code>选择{<cd4>}事物?”在</p>
<p>以<code>a</code>、<code>b</code>、和{<cd7>}为例。我们可以用多少种方法创建以下尺寸的组合?在</p>
<ol start=“0”>
<li>只有一种方法可以选择0项:<code>{}</code></li>
<li>有3种可能的组合:<code>{a}</code>,<code>{b}</code>,或{<cd11>}</li>
<li>{cd13>{</li>
<li>仅<code>{a, b, c}</code></li>
</ol>
<p>你知道吗,正好是帕斯卡三角形的第三层:<code>1 3 3 1</code>!事实证明,我们可以在每一个层面上使用它。在</p>
<pre><code>0: nCr(0, 0)
1: nCr(1, 0) nCr(1, 1)
2: nCr(2, 0) nCr(2, 1) nCr(2, 2)
3: nCr(3, 0) nCr(3, 1) nCr(3, 2) nCr(3, 3)
etc
etc
</code></pre>
<p>那么,我们该如何编码呢?看看<a href="https://stackoverflow.com/a/4941932/5491375">this answer</a>我们得到了<code>nCr</code>函数</p>
^{pr2}$
<p>最后,让我们创建一个递归函数来将它们联系在一起。在</p>
<pre><code>In [457]: def pascal(n):
...: if n >= 1:
...: pascal(n - 1)
...: print(' '.join(str(nCr(n - 1, r)) for r in range(n)))
...:
In [463]: pascal(5)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
</code></pre>
<p>从技术上讲,这应该是<code>pascal(4)</code>,因为Pascal的三角形是零索引的*,但我只是根据OPs请求。如果我们想改变这个,我们将把<code>pascal</code>函数改为</p>
<pre><code>In [468]: def pascal(n):
...: if n >= 0:
...: pascal(n - 1)
...: print(' '.join(str(nCr(n, r)) for r in range(n + 1)))
...:
</code></pre>