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


    用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].

  • 相关阅读:
    windows-如何免费让电脑自带的家庭中文版升级成专业版且不需要重装
    服务器管理-windows服务器如果让服务器自动定时重启
    International Olympiad In Informatics 2009 August 8 – 15, Plovdiv, Bulgaria Contest Day 1
    USACO 2008 FEB Eating Together
    POJ 2823 Sliding Window 滑动窗口 单调队列 Monotone Queue
    1st Junior Balkan Olympiad in Informatics Boats 船 DP
    USACO 2009 FEB Fair Shuttle 庙会班车 贪心
    USACO 2007 NOV Sunscreen 防晒霜 贪心
    JN 刷墙 过程DP
    Luogu
  • 原文地址:https://www.cnblogs.com/amengduo/p/9586838.html
Copyright © 2020-2023  润新知