• 从 Linq Aggregate 到 chrome 控制台的奇葩旅行


     和 Js 的 Reduce 类似,需要注意的是如果提供种子会多迭代一次。

     JS 的 Reduce 可以通过 初始化 数组来提供种子。

     累加器 概念应用广泛,可以通过定义累加器类型来实现 更多功能,这里一定要注意迭代次数。

    比如 实现 map

     比如 尾递归 ,累加器 (y)减少了计算次数。

    sum 计算 : 5+ sum(4)

           => 4+sum(3) 

                  => 3+sum(2)

                 => 2+sum(1)

                      => 1

    =>2+1=>3+3=>6+4=>10+5 =>15 

    sump 计算:sump(4,5) =>sump(3,9) =>sump(2,12) =>sump(1,14) =>sump(0,15) =>15

     sum 可以计算到 11429 ,sump 只能计算到10476 。这是为什么呢???

     

    补:昨天睡觉的时候突然想明白了,原因是 sump有两个参数 压入栈的上下文比较大。

    验证:

    第一组:确实随着参数变多,深度变浅。

     第二组,说明传参变多 深度变浅。

    但是这里又有一个新问题,为什么 x=>{...} 要比 ()=>{...} 还要深呢?

     测试代码:

    try{ var i =0,loop=(x)=>loop(i++),n=loop(1) }catch {i}  
    
    var sump = (x,y)=>x==0?(y):sump(x-1,y+x);
    
    var sum = x=> x===1?(x):x + sum(x-1);
  • 相关阅读:
    百度地图-放大地图
    haroxy hdr
    haproxy path_beg
    haproxy /admin跳转 不会在接口上再次加上admin
    api 跳转规则
    如何利用BI搭建电商数据分析平台
    如何利用BI搭建电商数据分析平台
    北向接口与南向接口
    perl 传递对象到模块
    mysql 监控 大批量的插入,删除,和修改
  • 原文地址:https://www.cnblogs.com/zhuwansu/p/13674142.html
Copyright © 2020-2023  润新知