太原面经分享:如何用js实现返回斐波那契数列的第n个值的函数
面试攒经验,let's go!
值此高考来临之际,闲不住的我又双叒叕出发去面试攒经验了,去了公司交待一番流程后,面试官甩给了我一张A4纸,上面写着一道js算法笔试题(一开始我并不知道这是在考察js算法),上面写着“1、1、2、3、5、8......,求第n个数的值”
不得不承认,当时我第一眼看这道题大脑里是懵逼的。后来才想起来,这不就是数学题里的那个斐波那契(肥婆纳妾)数列么!从第三个数开始,每个数都是前两个数的和。
能get到这个点,你已经成功了一半了。另一半就是需要你将数学公式逻辑转变成js程序逻辑。
那其实这个问题还可以换个问法:实现一个函数,输入一个数字n能返回斐波那契数列的第n个值。
分析思路
首先,思路很重要,让我们一起来分析一下,大概的思路是这样的:
首先我们要把特殊的部分给独立出来做个判断,哪些数字是特殊的呢?很明显是斐波那契数列的前两项,而斐波那契数列的前两项都为1。然后定义三个变量,firstNum、secondNum、total,分别代表着第一个数字,第二个数字,还有他们俩之和。
然后通过一个for循环遍历,将firstNum加上secondNum的结果赋值给total,然后将secondNum的value赋值给firstNum,把total的value赋值给secondNum,以此根据传入的n来不断地循环叠加,达到想要的total值,最后return返回出去。
思路说完后,让我们用js把它实现出来:
// 可能是最普通的解法
var series = function (n) {
, ];
) {
return sum[n];
}
;
;
;
; i<= n; i++) {
total = firstNum + secondNum;
firstNum = secondNum;
secondNum = total;
}
return total;
}
面试题的最优解
记住,面试官与咱们应聘者的思维不同,你应聘的时候你大部分时间是在想,这道题我会不会做,能不能做出来,而他们想的是这道题的最优解。
前端的工作,“最优解”其实是一种自我追求进步的表现。
除了以上这种办法,还有什么更好的解决办法吗?答案是有的。
先来看看迭代的解法
var series = function (n) {
,];
;i<=n;i++){
feipo[i] = feipo[i-] + feipo[i-]
}
return feipo[n];
}
// console.log(series(6));
再来看看递归的解法
var series = function (n) {
) {
) + series(n-)
}else {
return n;
}
}
// console.log(series(6));
究竟哪个才是最优解,相信看完文章的你们已经有了答案。
可能你们会问:
那闰土你在笔试时做出来了么?
你猜~
写在后面
目前为止我也参加过很多次大大小小的前端面试,确实也听说过有不少面试官会问到一些算法。通常会涉及的,是链表、树、字符串、数组相关的知识。前端面试对算法要求不高,似乎已经是业内的一种共识了。虽说算法好的前端面试肯定会加分,但是仅凭常见的面试题,而不去联系需求,很难让人觉得,算法对于前端真的很重要。
直到有这么一天,太原这家公司的前端leader给我出了这么一道js算法题之后,还跟我聊了很多内容,与我固有的思维产生了强烈的碰撞。面试官还跟我讲,他们公司的技术总监是微软出身,很注重算法这块,他当初应聘进来的时候,也是考察的算法。
虽然这次面试被pass了,但是我认为工程师都应该学习算法,我觉得那不仅仅是对软件工程思想的培养,更是一种对心智的锻炼。
文章预告:更多的前端面试分享我都会第一时间更新在我的公众号<闰土大叔>里面,欢迎关注!

太原面经分享:如何用js实现返回斐波那契数列的第n个值的函数的更多相关文章
- 用JS,求斐波那契数列第n项的值
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- js中的斐波那契数列法
//斐波那契数列:1,2,3,5,8,13…… //从第3个起的第n个等于前两个之和 //解法1: var n1 = 1,n2 = 2; for(var i=3;i<101;i++){ var ...
- 两种JS方法实现斐波那契数列
第一种方法:递归 function fibonacci(n){ if (n==0){ return 0; }else if (n==1){ return 1; } return fibonacci(n ...
- python面试题之如何用Python输出一个斐波那契数列
so eary! 1 a,b = 0, 1 2 while b<100: 3 print (b), 4 a, b = b, a+b 本文转载自:python黑洞网 原文链接:http://www ...
- JS高级. 06 缓存、分析解决递归斐波那契数列、jQuery缓存、沙箱、函数的四种调用方式、call和apply修改函数调用方法
缓存 cache 作用就是将一些常用的数据存储起来 提升性能 cdn //-----------------分析解决递归斐波那契数列<script> //定义一个缓存数组,存储已经计算出来 ...
- js写出斐波那契数列
斐波那契数列:1.1.2.3.5.8.13.21.34.…… 函数: 使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1. for循环: 从底层向上运 ...
- 关于JS递归函数求斐波那契数列两种实现方法
百度已经解释的很详细了,但是不写注释还真是看不懂,递归,就直接套公式了,for循坏,我们就用EXCEL看一下规律 可以看到B是A+B的和,A往后就是B的值,所以我们需要第三个变量来保存他们的和,取出B ...
- js算法集合(二) javascript实现斐波那契数列 (兔子数列)
js算法集合(二) 斐波那契数列 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列进行研究,来加深对循环的理解. Javascript实 ...
- js 斐波那契数列(兔子问题)
对于JS初学者来说,斐波那契数列一直是个头疼的问题,总是理不清思路. 希望看完这篇文章之后会对你有帮助. 什么是斐波那契数列 : 答: 斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契(Le ...
随机推荐
- 第七节:利用CancellationTokenSource实现任务取消和利用CancellationToken类检测取消异常。
一. 传统的线程取消 所谓的线程取消,就是线程正在执行的过程中取消线程任务. 传统的线程取消,是通过一个变量来控制,但是这种方式,在release模式下,被优化从cpu高速缓存中读取,而不是从内存中读 ...
- [物理学与PDEs]第1章第9节 Darwin 模型 9.1 拟静电模型及其修正形式
1. 拟静电模型: 当 $\cfrac{\omega}{c}\ll \cfrac{1}{c}\lra \omega\ll \cfrac{c}{l}$ 时, $$\bex \cfrac{1}{c}\cf ...
- [物理学与PDEs]第1章第8节 静电场和静磁场 8.1 静电场
1. 静电场: 由静止电荷产生的稳定电场. 2. 此时, Maxwell 方程组为 $$\bex \Div{\bf D}=\rho_f,\quad \rot{\bf E}={\bf 0}. \eex$ ...
- Python3:排序函数sort() 和 sorted() 之介绍
今天来讲一下Python中的排序函数.Python中有2个内建的排序函数,分别为sort() 和 sorted() 下面介绍分别介绍一下2个函数: 1.有一个列表 :a=[1,4,5,88,0,7], ...
- vue封装axios方法推荐)
目录结构: api.js export default { myTopic: '/api/subscribe-data/post/cat' } request.js import axios from ...
- react简书
开发项目之前的准备 https://www.chromefor.com/ 登录此网站 下载相关crx react插件 不然要FQ 下载 React Developer Tools 谷歌插件下载 Re ...
- 菜鸟博客装饰分享CSS+HTML+js
博客布局更改,各种百度,自己修改,搞成现在这样,有兴趣的朋友可以复制我下面的把自己博客覆盖了,然后在进行更改 不懂可加群问我:675678830 如果想开通打赏,用到js,需要在 下列中 博客侧边栏公 ...
- Java消息队列--ActiveMq 初体验
1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...
- 一个基于Net 的CMS -- Umbraco CMS
一个基于Net 的CMS -- Umbraco CMS: https://umbraco.com/ Sitecore 和 EPiServer http://www.bubuko.com/i ...
- jenkins中slave节点连接的两种常用方式
我们在使用jenkins的时候,一般来说肯定是有slave节点的,本来网上也有好多关于jenkins节点配置的教程,我也就不写了.简单说明一下:任务一般是在slave上面运行的.当然不是讲master ...