• 杨辉三角


    来源:廖雪峰-python-高级特性-生成器

    杨辉三角规律:下一行的值为:上一行分别在前端和末尾添加0,形成两个新列表,两个新列表的每个元素相加得到的新列表。

    实践:

    在线 python 运行:菜鸟驿站

    循环实现

    #!/usr/bin/python
     
    def triangles(max=10):
    	arr = [1]
    	n = 0
    	while n < max:
    		print(arr)
    		arr1 = [0] + arr[:]
    		arr2 = arr[:] + [0]
    		arr = [arr1[i] + arr2[i] for i in range(len(arr1))]
    		n += 1
    		
    triangles()
    

    生成器实现

    # -*- coding: utf-8 -*-
    
    def triangles():
        arr = [1]
        while True:
            yield arr
            arr1 = [0] + arr[:]
            arr2 = arr[:] + [0]
            arr = [arr1[i]+arr2[i] for i in range(len(arr1))]
            
    # 期待输出:
    # [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]
    # [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
    n = 0
    results = []
    for t in triangles():
        results.append(t)
        n = n + 1
        if n == 10:
            break
    
    for t in results:
        print(t)
    
    if results == [
        [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],
        [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
    ]:
        print('测试通过!')
    else:
        print('测试失败!')
    

    在线js运行: jsbin.com

    js 实现-循环

    function triangles(max = 10) {
      const arr = [1]
      let n = 0
      while (n < max) {
        console.log(arr)
        const arr1 = [0, ...arr]
        const arr2 = [...arr, 0]
        arr1.forEach((item, i) => arr[i] = arr1[i] + arr2[i])
        n++
      }
    }
    
    triangles()
    

    js 迭代器实现

    function *triangles() {
      const arr = [1]
      let n = 0
      while (true) {
        yield arr
        const arr1 = [0, ...arr]
        const arr2 = [...arr, 0]
        arr1.forEach((item, i) => arr[i] = arr1[i] + arr2[i])
      }
    }
    
    const res = triangles()
    
    Array(10).fill(1).forEach((item, i) => {
      console.log(res.next().value)
    })
    
  • 相关阅读:
    HTML5手机APP开发入(5)
    HTML5手机APP开发入(4)
    HTML5手机APP开发入(3)
    HTML5手机APP开发入门(2)
    五一干货来袭!开源Moon.Orm标准版发布!
    你不知道的HttpHandler相关知识
    我们就专心做一件事情---数据处理框架
    jQuery Mobile案例,最近用Moon.Web和Moon.Orm做了一套系统
    谈谈字符编码的问题
    一起玩玩面试题(第一关)---五道题估计你要挂四道
  • 原文地址:https://www.cnblogs.com/EnSnail/p/13461771.html
Copyright © 2020-2023  润新知