热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

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

代码如下:

        1
       1 1
      1 2 1
     1 3 3 1
    1 4 6 4 1
   1 5 10 10 5 1
  1 6 15 20 15 6 1
 1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1


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

每一项的值等于他左上角的数和右上角的数的和,如果左上角或者右上角没有数字,就按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].


推荐阅读
  • rabbitmq集群搭建「建议收藏」
    rabbitmq集群搭建「建议收藏」一、基础安装前提:三个节点都主机映射,关防火墙网络,配好yum(后边出错,主机名和映射要对应)1.安装(三个节点)2.mq1启动rabbitmq ... [详细]
  • 近期看见一篇来自Intel的很有意思的分析文章,作者提到在他向45名与会的各公司程序员开发经理战略师提问“什么是实施并行编程的最大障碍”时,下面五个因素 ... [详细]
  • 丘成桐得意门生顾险峰:机器学习解决不了的医学图像问题,如何用几何方法来攻克?
    雷锋网AI科技评论:在2017图像计算与数字医学国际研讨会(ISICDM)上,顾险峰教授应邀出席并做了主题为“医学图像中的几何方法”的学术报告,介绍了基于他们提出的共形几何理论的种 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了看大数据时代下的IT架构业界消息队列对比相关的知识,希望对你有一定的参考价值。一、MQ(MessageQue ... [详细]
  • 如何通过Thrift访问ApsaraDB for HBase
    这篇文章主要介绍如何通过Thrift访问ApsaraDBforHBase,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Thrift多语言接入 ... [详细]
  • 为什么要用Go语言做后端
    FMZ数字货币量化平台www.fmz.com,后端使用Go语言,这里是创始人Zero谈论使用G ... [详细]
  • 分布式系统:并发系统概述
    分布式系统:并发系统概述分布式系统由多个独立的代码片段组成,它们在多个位置的许多处理节点 ... [详细]
  • 简介:rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循MozillaPublicLicense开源协议,采用Erlang实现的工业级的消息队列(M ... [详细]
  • 简介基于java开发,高可用应用场景1、应用解耦2、流量销峰3、异步处理4、消息分发(邮件、短信、日志、数据处理)延时队列场景:需要延时单次延迟执行的场景,比如订单取消常见问题1、 ... [详细]
  • Note:ThisproblemisthesamewihtEgihtQueenproblem,whichisaclassicDFSproblemButifyouuseDFSd ... [详细]
  • Thrift的简单使用 ... [详细]
  • 原文:RabbitMQ集群原理和完善一、RabbitMQ集群方案的原理RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erla ... [详细]
  • 04 RabbitMQ进阶2之集群和延迟投递
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了04RabbitMQ进阶2之集群和延迟投递相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Scala.Net和Scala与Martin Odersky
    我们与Typesafe主席兼首席架构师,Typesafe的共同创始人MartinOdersky讨论了Scala.Net(支持.Net的Scala版本&# ... [详细]
  • Win10系统语言“删除”按钮灰色无法点击该怎么办?
    Win10系统语言删除按钮灰色无法点击该怎么办?在win10系统中一般来说我们可以自由设置语言,想删除就删除。但是近期使用win10系统的用户反应在系统语言设置界面无法删除语言的现 ... [详细]
author-avatar
小乌龟和小土鳖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有