擅长:python、mysql、java
<p>一个纯递归的解决方案(没有循环,没有赋值,没有外部模块,只有使用的python函数是<code>sum</code>,这也是可以避免的)。这段代码可以很容易地翻译成LISP家族语言。在</p>
<pre><code>def pascal_line(n):
def nextline(thisline):
if thisline == []:
return []
else:
return [sum(thisline[:2])] + nextline(thisline[1:])
if n == 1:
return [1]
elif n == 2:
return [1, 1]
else:
return [1]+nextline(pascal_line(n-1))
def pascal_triangle(n):
def printline(m):
if m <= n:
print(*pascal_line(m))
printline(m+1)
return printline(1)
pascal_triangle(6)
# output =>
# 1
# 1 1
# 1 2 1
# 1 3 3 1
# 1 4 6 4 1
# 1 5 10 10 5 1
</code></pre>
<p>内部函数<code>nextline</code>基于当前行递归地导出pascal三角形中的下一行(不带前导1)。在</p>
<p>函数<code>pascal_line</code>通过递归地调用<code>nextline</code>和<em>(n-1)th</em>线(它自己以前的解决方案),导出pascal三角形中的<em>nth</em>线。在</p>
<p>函数<code>pascal_triangle</code>通过递归调用<code>pascal_line</code>输出pascal三角形中的行。在</p>
<p>三个递归函数一起很好地说明了递归方法的典型分而治之的本质。在</p>