用函数式编程思维解析anagrams函数
//函数式编程思维分析 这个排列函数 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函数相关推荐
- python内置高阶函数求导_Python——函数式编程、高阶函数和内置函数,及
Python--函数式编程.高阶函数及内置函数 函数式编程 一.不可变数据:不用变量保存状态不修改变量 二.第一类对象:函数即"变量" 1.函数名可以当做参数传递 2.返回值可以是 ...
- 如何在函数式编程中存在时间函数?
本文翻译自:How can a time function exist in functional programming? I've to admit that I don't know much ...
- py函数式编程(高阶函数map/reduce/filter/sorted、闭包函数/返回函数、匿名函数lamber、@装饰器decorator、偏函数functool.partial())
#py函数式编程.py #高阶函数map/reduce/filter/sorted.闭包函数/返回函数.匿名函数lamber.@装饰器decorator.偏函数functool.partial()# ...
- 函数式编程中常用的函数(总结)
一 函数式编程理解 1.函数式编程的含义: 函数式编程是一种编程的基本风格,就是构建程序的结构和元素的方式.函数式编程将计算过程看做是数学函数,也就是可以使用表达式编程.在函数的代码中,函数的返回值只 ...
- 什么是函数式编程思维?
我为什么要把我的知乎回答搬到这里呢--大概是太久没发东西了来凑数吧. 作者:nameoverflow 链接:https://www.zhihu.com/question/28292740/answer ...
- python采用函数式编程模式吗_Python函数与函数式编程
1 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创 ...
- javascript里的偏函数——本质函数式编程+闭包,返回函数
最终效果: var greet = function(greeting, name) {return greeting + ' ' + name; };var sayHelloTo = _.parti ...
- C#函数式编程之标准高阶函数
何为高阶函数 大家可能对这个名词并不熟悉,但是这个名词所表达的事物却是我们经常使用到的.只要我们的函数的参数能够接收函数,或者函数能够返回函数,当然动态生成的也包括在内.那么我们就将这类函数叫做高阶函 ...
- Scala - 快速学习08 - 函数式编程:高阶函数
函数式编程的崛起 函数式编程中的"值不可变性"避免了对公共的可变状态进行同步访问控制的复杂问题,能够较好满足分布式并行编程的需求,适应大数据时代的到来. 函数是第一等公民 可以作为 ...
最新文章
- ArcGIS Server for Silverlight 之集群(Simple Clusterer)
- 即时通讯:XMPP基础
- html div box,html – 为转换后的div添加box-shadow
- 用字节流查看txt文件
- springboot listener_看完这份springboot 全套面试提升宝典,面试不带怕的
- android 首页广告显示不出来的,android – Admob插页式广告(全屏)不会显示
- 世界杯29场点球大战的269个点球数据都在这里!霍金的公式帮了英格兰吗?
- 信息学奥赛一本通 1042:奇偶ASCII值判断 | OpenJudge NOI 1.4 04
- Linux入门学习(四)
- html资源文件放在哪里,09 Spring Boot开发web项目之静态资源放哪里?
- 【2020团体程序设计天梯赛】L2-3 完全二叉树的层序遍历(后序遍历转层次遍历)
- vue组件制作专题 - (mpvue专用)在mpvue中纯自己写css实现简单左右轮播
- FPGA远程更新之限制条件
- hdu_4742_Pinball Game 3D(cdq分治+树状数组)
- matlab绘制平滑曲线,matlab绘制平滑曲线
- java继承序列化_Java中具有继承的对象序列化
- ORA-28100 策略函数方案NCSI无效
- Linux之Redis安装(解压版)
- Linux机械硬盘初始化,教你如何初始化外接盒中的硬盘
- c语言父子线程交替打印,多线程面试题之【三线程按顺序交替打印ABC的方法】...