求教 杨辉三角的递归解法 python

Python011

求教 杨辉三角的递归解法 python,第1张

1、九九乘法表

def multiplicationTable():

for i in range(1, 10):

for j in range(1, i):

print "%d * %d = %d\t" % (j, i, j * i),

print "%d * %d = %d\n" % (i, i, i * i),

if __name__ == '__main__':

multiplicationTable()

2、杨辉三角

def pascalsTriangle(n):

line = [1]

print "\t" * (n - 1),

print "%d\n" % line[-1],

for i in range(n - 1):

new_line = [1]

for j in range(i):

new_line.append(line[j] + line[j + 1])

new_line.append(1)

line = new_line

print "\t" * (n - i - 2),

for each in line[:-1]:

print "%d\t\t" % each,

print "%d\n" % line[-1],

if __name__ == '__main__':

pascalsTriangle(7)

杨辉三角python经典算法可以利用Python中的循环方法,具体操作如下。

第一步,循环内的遍历从1开始,即从代码开头定义每行的初始值为1,后续不再改变。

第二步为,由第二个元素开始,每行元素为上一行对应位置和一位置元素的和。每行最后一个元素都为1,直接最后添加即可。

用Python输出一个杨辉三角的例子

这篇文章主要介绍了用Python和erlang输出一个杨辉三角的例子,同时还提供了一个erlang版杨辉三角,需要的朋友可以参考下

关于杨辉三角是什么东西,右转维基百科:杨辉三角

稍微看一下直观一点的图:

代码如下:

杨辉三角有以下几个特点:

每一项的值等于他左上角的数和右上角的数的和,如果左上角或者右上角没有数字,就按0计算。

第N层项数总比N-1层多1个

计算第N层的杨辉三角,必须知道N-1层的数字,然后将相邻2项的数字相加,就能得到下一层除了最边上2个1的所有数字。 听起来有点像递归的思想,我们不妨假设我们已经知道N-1层的数字,来计算一下N层的数字吧。

代码如下:

def _yanghui_trangle(n, result):

if n == 1:

return [1]

else:

return [sum(i) for i in zip([0] + result, result + [0])]

上面代码中,result表示N-1层杨辉三角的数字。实习上,我们在列表2端各补了一个0,然后计算相邻项的和,就可以直接得到结果。

稍微完善一下代码:

代码如下:

def yanghui_trangle(n):

def _yanghui_trangle(n, result):

if n == 1:

return [1]

else:

return [sum(i) for i in zip([0] + result, result + [0])]

pre_result = []

for i in xrange(n):

pre_result = _yanghui_trangle(i + 1, pre_result)

yield pre_result

if __name__ == "__main__":

for line in yanghui_trangle1(5):

print line

_yanghui_trangle可以用lambda的方式简写,但是可读性感觉会变差,所以还是保持现状好了。

tips: 上面的程序并没有考虑数据格式化的问题,也就是说输出不是完美的三角形。

鉴于最近在学习erlang,补上一个erlang版本的,性能上没有测试过,不过还是要惊叹于函数式语言的表达能力:

代码如下:

-module(yanghui).

-author(lfyzjck).

-export([triangle/1]).

triangle_next(P) ->

lists:zipwith(fun(X, Y) ->X+Y end, [0|P], P ++ [0]).

triangle(1) ->

[[1]]

triangle(N) ->

L = triangle(N - 1),

[H|_] = L,

[triangle_next(H)|L].