//函数式编程思维分析 这个排列函数
const anagrams = str => {if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str];return str.split('').reduce((acc, letter, i) =>acc.concat(anagrams(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val)), []);
};const result = anagrams('abc');
console.log(result);//['abc','acb','bac','bca','cab','cba'];//函数式编程基本思维:
//在函数式编程中,可以应用数学上的分配律和结合律,递归最好的理解方式
//这里用了分配率和结合律
//reduce(遍历+迭代)
//递归(组合分配律和结合律式子)
//map(运算分配律式子:展开式子)//以'abcd'为demo解析
//先用reduce 获得算子 'a' 'b' 'c' 'd'
//最终结果用[]来统计,或者叫记录吧
//递归: 'a'(...) 'b'(...) 'c'(...) 'd'(...) : 组合成分配律和结合律式子
//其中... ,这里以'a'(...) 为demo
//'a'(...)的...为'bcd'
//由递归再组合分配律和结合律式子 'a'('b'(...) + 'c'(...) + 'd'(...))
//由递归再组合分配律和结合律式子 'a'('b'('cd'+'dc') + 'c'('bd' + 'db') + 'd'('bc' + 'cb'));
//map用于运算分配律和结合律式子 'a'('bcd' + 'bdc' + 'cbd' + 'cdb' + 'dbc' + 'dcb');
//map用于运算分配律和结合律式子 'abcd' + 'abdc' + 'acbd' + 'acdb' + 'adbc' +'adcb';
//concat是+号
console.log(anagrams('abcd'));//['abcd','abdc','acbd','acdb','adbc','adcb',...余下的是'b'(...) 'c'(...) 'd'(...)的情况]

转载于:https://www.cnblogs.com/lantuoxie/p/8056825.html

用函数式编程思维解析anagrams函数相关推荐

  1. python内置高阶函数求导_Python——函数式编程、高阶函数和内置函数,及

    Python--函数式编程.高阶函数及内置函数 函数式编程 一.不可变数据:不用变量保存状态不修改变量 二.第一类对象:函数即"变量" 1.函数名可以当做参数传递 2.返回值可以是 ...

  2. 如何在函数式编程中存在时间函数?

    本文翻译自:How can a time function exist in functional programming? I've to admit that I don't know much ...

  3. py函数式编程(高阶函数map/reduce/filter/sorted、闭包函数/返回函数、匿名函数lamber、@装饰器decorator、偏函数functool.partial())

    #py函数式编程.py #高阶函数map/reduce/filter/sorted.闭包函数/返回函数.匿名函数lamber.@装饰器decorator.偏函数functool.partial()# ...

  4. 函数式编程中常用的函数(总结)

    一 函数式编程理解 1.函数式编程的含义: 函数式编程是一种编程的基本风格,就是构建程序的结构和元素的方式.函数式编程将计算过程看做是数学函数,也就是可以使用表达式编程.在函数的代码中,函数的返回值只 ...

  5. 什么是函数式编程思维?

    我为什么要把我的知乎回答搬到这里呢--大概是太久没发东西了来凑数吧. 作者:nameoverflow 链接:https://www.zhihu.com/question/28292740/answer ...

  6. python采用函数式编程模式吗_Python函数与函数式编程

    1 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创 ...

  7. javascript里的偏函数——本质函数式编程+闭包,返回函数

    最终效果: var greet = function(greeting, name) {return greeting + ' ' + name; };var sayHelloTo = _.parti ...

  8. C#函数式编程之标准高阶函数

    何为高阶函数 大家可能对这个名词并不熟悉,但是这个名词所表达的事物却是我们经常使用到的.只要我们的函数的参数能够接收函数,或者函数能够返回函数,当然动态生成的也包括在内.那么我们就将这类函数叫做高阶函 ...

  9. Scala - 快速学习08 - 函数式编程:高阶函数

    函数式编程的崛起 函数式编程中的"值不可变性"避免了对公共的可变状态进行同步访问控制的复杂问题,能够较好满足分布式并行编程的需求,适应大数据时代的到来. 函数是第一等公民 可以作为 ...

最新文章

  1. ArcGIS Server for Silverlight 之集群(Simple Clusterer)
  2. 即时通讯:XMPP基础
  3. html div box,html – 为转换后的div添加box-shadow
  4. 用字节流查看txt文件
  5. springboot listener_看完这份springboot 全套面试提升宝典,面试不带怕的
  6. android 首页广告显示不出来的,android – Admob插页式广告(全屏)不会显示
  7. 世界杯29场点球大战的269个点球数据都在这里!霍金的公式帮了英格兰吗?
  8. 信息学奥赛一本通 1042:奇偶ASCII值判断 | OpenJudge NOI 1.4 04
  9. Linux入门学习(四)
  10. html资源文件放在哪里,09 Spring Boot开发web项目之静态资源放哪里?
  11. 【2020团体程序设计天梯赛】L2-3 完全二叉树的层序遍历(后序遍历转层次遍历)
  12. vue组件制作专题 - (mpvue专用)在mpvue中纯自己写css实现简单左右轮播
  13. FPGA远程更新之限制条件
  14. hdu_4742_Pinball Game 3D(cdq分治+树状数组)
  15. matlab绘制平滑曲线,matlab绘制平滑曲线
  16. java继承序列化_Java中具有继承的对象序列化
  17. ORA-28100 策略函数方案NCSI无效
  18. Linux之Redis安装(解压版)
  19. Linux机械硬盘初始化,教你如何初始化外接盒中的硬盘
  20. c语言父子线程交替打印,多线程面试题之【三线程按顺序交替打印ABC的方法】...

热门文章

  1. js获取微信状态栏高度_人人商城打包app教程 方法 hbuilder打包支持支付宝微信原生支付...
  2. 由浅入深:自己动手开发模板引擎——置换型模板引擎(二)
  3. display:inline、block、inline-block
  4. JS的Event属性和方法
  5. 使用Strust2框架写HelloWorld
  6. Axure中的原型如何导出成为HTML5源码
  7. TabSpec与TabHost
  8. android 的listview 3大优化策略
  9. ACM 模板--邻接表 有向图 拓扑排序
  10. linux下各个头文件及作用总结