用递归实现一个简单的函数,返回一个布尔值,检测某个字符串是否是回文,例如"aabbaa"返回true,而"zhouxiansheng"返回false。
方法一:reverse1、函数命名:palindrome,n.回文(正反读都一样的词语);
2、js实现字符串的完全翻转:String.split("").reverse().join("");
functionisPalindrome(str){returnstr.split("").reverse().join("")===str}
相信这样的方法,大多数程序员都会做,但是大家有没有想过,如果面试题限制使用reverse方法,那该怎么做呢?
方法二:递归当函数反复调用自身时,就执行了递归操作,如果把一个字符串反转,能和原字符串相等,那么这就是一个回文字符串。下面代码就是实现回文功能的函数,它有两个结束递归的出口,如果不满足退出的条件,那么每次都会去除首尾字符再执行递归。
两个结束递归的出口:
1、字符长度小于等于1;
2、首字母和末尾字母做匹配。
functionisPalindrome(str){if(str.length=1)returntrue;if(str[0]!==str[str.length-1])returnfalse;returnisPalindrome(str.substr(1,str.length-2));}
我是一个能玩转美工与后端PHP的前端架构师,每周一更是我一直以来追求的目标,感谢您能持续
作者
LIHONGYI
译者
弯月,责编
屠敏
出品
CSDN(ID:CSDNnews)
以下为译文:这个世界上金钱无法解决的事情为数不多,然而糟糕的软件就是其中之一。身价数十亿美元的航空公司做出来的航班搜索应用往往还不如学生的作品。尽管全世界成熟的出租车公司都面临着乘车共享服务的威胁,但他们的叫车应用依然很糟糕。痛苦的企业IT系统通常需要投入大量预算,花多年的时间才能建立起来。引发劣质软件的原因各种各样,但肯定不是缺乏资金。令人惊讶的是,引发劣质软件的根本原因似乎与工程上的抉择关系不大,更多的是与开发项目的管理方式有关。糟糕的软件项目的过程往往非常相似:项目所有者想要构建某个解决方案,但绝不会明确定义希望解决的问题。然后,他们会收集一长串大量利益相关者的要求。然后,将此列表交给大型的外部开发团队,由这个团队从头构建这个高度定制的软件。等到所有需求都得到满足后,每个人都会庆祝系统启动,并宣布项目完成。然而,尽管这样的系统符合技术上的规范,但真正将它交到实际用户手中时就会出现严重的问题。运行速度缓慢,使用方法含混不清,而且还塞满了各种bug,最后只落得屡屡滑坡。不幸的是,到这个地步的时候,外部的开发团队已然解散,已没有剩余资源来进行必要的修复。等到几年后,一个新的项目又启动了,所有了解引发这些问题原因的人都已经离职,于是悲剧又一次开始重复上演。正确的编程语言、系统架构或界面设计因项目而异。但是,软件特有的一些特征会导致传统的管理实践失效,同时小型创业公司能够以低廉的预算取得成功:重用好的软件很容易,这是快速构建优秀软件的捷径之一;
软件的限制不在于构建它的资源量,而在于它在崩溃之前的复杂程度;
软件的主要价值不在于生成的代码,而在于生成代码的人员积累的知识。
虽然了解这些特征可能无法保证良好的结果,但确实有助于理解为什么这么多项目会产生不良后果。此外,我们还可以总结出如下核心的运营原则,从而大大提高成功的机会:项目刚开始的时候越简单越好;
找到问题并进行迭代;
聘请最优秀的工程师。
虽然还有很多更微妙的因素需要考虑,但这些原则为我们构建优秀的软件奠定了基础。借助重用快速构建优秀的软件软件的复制方便易行。从机器的角度来看,你可以将代码逐行复制并粘贴到另一台计算机上。更一般的情况,互联网上提供了很多教程,你可以在线学习如何利用现成的代码模块构建不同类型的系统。现代软件几乎没有一个是从头开始开发的。即使是最具创新性的应用程序也是通过融合和修改现有的软件而构建。可重用代码模块最大的来源是开源社区。开源软件的代码可供自由发布,以及任何人的查看和使用。开源社区最大的贡献者都是巨型科技公司。如果你想跟Facebook一样使用最先进的可扩展数据库,那么只需下载他们于年开源的Cassandra代码。如果你想亲自试试Google尖端的机器学习,那么可以下载他们于年发布的TensorFlow系统。使用开源代码不仅可以加快应用程序的开发速度,而且还可以让你接触比你自己开发的任何技术都复杂百倍的技术。此外,流行的开源代码更加安全,因为