太原面经分享:如何用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 ...
随机推荐
- [Luogu P3295][SCOI 2016]萌萌哒
先说下暴力做法,如果[l1,r1]和[l2,r2]子串相等等价于两个区间内每个数对应相等.那么可以用并查集暴力维护,把对应相等的数的位置维护到同一个集合里去,最后答案其实就是把每个集合可以放的数个数乘 ...
- [物理学与PDEs]第1章第9节 Darwin 模型 9.2 Maxwell 方程组的一个定解问题
设 $\Omega$ 为一有界区域, 外部为理想导体 $(\sigma=+\infty)$, 则 $\Omega$ 中电磁场满足 Maxwell 方程组 $$\beex \bea \ve\cfrac{ ...
- Java(6)for循环
一.for循环的使用场合 1.1.while循环——先判断,再循环 while(1.条件表达式){ //2.循环操作 //3.更改循环条件表达式 } 1.2.do…while——先 ...
- MySQL学习10 - 多表查询
一.多表连接查询 1.交叉连接 2.内连接 3.外连接之左连接 4.外连接之右连接 5.全外连接 二.符合条件连接查询 三.子查询 1.带in关键字的子查询 2.带比较运算符的子查询 3.带EXIST ...
- 【汇总目录】Java
疯狂Java学习笔记 [2019年03月20日] Lambda表达式与函数式接口 [2019年03月20日] Lambda表达式概念与基本语法 [2019年03月18日] 内部类 [2019年02月1 ...
- Django之Cookie和Session
http://www.cnblogs.com/liwenzhou/p/8343243.html 一.Cookie Cookie是什么? 就是保存在客户端浏览器上的键值对. Cookie为什么存在? 因 ...
- [NOI2015]软件包管理器-树链剖分
#include<bits/stdc++.h> using namespace std; const int maxn = 1e6+5; int n,m; int e,begin[maxn ...
- QPS/TPS/并发量/系统吞吐量概念和公式
1.概念 我们在日常工作中经常会听到QPS/TPS这些名词,也会经常被别人问起说你的系统吞吐量有多大.一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联,单个req ...
- jdbc连接sqlserver,mysql,oracle
class xxx{ private static String port = "1433"; private static String ip = "192.168.2 ...
- JS中 typeof,instanceof类型检测方式
在js中的类型检测目前我所知道的是三种方式,分别有它们的应用场景: 1.typeof:主要用于检测基本类型. typeof undefined;//=> undefined typeof 'a' ...