太原面经分享:如何用js实现返回斐波那契数列的第n个值的函数(代码片段)

running-runtu running-runtu     2022-11-21     459

关键词:

面试攒经验,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) 

  var sum = [0, 1];

  if(n < 2) 

    return sum[n];

  



  var firstNum = 0;

  var secondNum = 1;

  var total = 0;



  for (var i = 2; i<= n; i++) 

    total = firstNum + secondNum;

    firstNum = secondNum;

    secondNum = total;

  

  return total;

 

面试题的最优解

 

记住,面试官与咱们应聘者的思维不同,你应聘的时候你大部分时间是在想,这道题我会不会做,能不能做出来,而他们想的是这道题的最优解。

 

前端的工作,“最优解”其实是一种自我追求进步的表现。

 

除了以上这种办法,还有什么更好的解决办法吗?答案是有的。

 

先来看看迭代的解法

var series = function (n) 

  var feipo = [0,1];

  for(var i=2;i<=n;i++)

    feipo[i] = feipo[i-1] + feipo[i-2]

  

  return feipo[n];



// console.log(series(6));

 

再来看看递归的解法

 

var series = function (n) 

  if(n >= 2) 

    return series(n-1) + series(n-2)

  else 

    return n;

  



// console.log(series(6));

 

究竟哪个才是最优解,相信看完文章的你们已经有了答案。

 

可能你们会问:

那闰土你在笔试时做出来了么?

你猜~

 

写在后面

 

目前为止我也参加过很多次大大小小的前端面试,确实也听说过有不少面试官会问到一些算法。通常会涉及的,是链表、树、字符串、数组相关的知识。前端面试对算法要求不高,似乎已经是业内的一种共识了。虽说算法好的前端面试肯定会加分,但是仅凭常见的面试题,而不去联系需求,很难让人觉得,算法对于前端真的很重要。

 

直到有这么一天,太原这家公司的前端leader给我出了这么一道js算法题之后,还跟我聊了很多内容,与我固有的思维产生了强烈的碰撞。面试官还跟我讲,他们公司的技术总监是微软出身,很注重算法这块,他当初应聘进来的时候,也是考察的算法。

 

虽然这次面试被pass了,但是我认为工程师都应该学习算法,我觉得那不仅仅是对软件工程思想的培养,更是一种对心智的锻炼。

 

文章预告:更多的前端面试分享我都会第一时间更新在我的公众号<闰土大叔>里面,欢迎关注!

 

技术分享图片

 

一天一门编程语言使用汇编语言实现斐波那契数列(代码片段)

...编语言实现斐波那契数列一、什么是斐波那契数列二、如何用汇编语言实现斐波那契数列一、汇编语言概念1.1什么是汇编语言1.2汇编语言的特点二、汇编语言指令2.1简单指令2.2复杂指令汇编语言程序结构代码实例指令集常用指令... 查看详情

斐波那契数列(代码片段)

...初始结果为:1000000008,请返回1。算法分析用循环或递归实现均可,当前数为前两项之和,注意不同题目初始值可能不同。代码classSolution(object):deffib(self,n):x=0y=1temp=0ifn==0orn==1:returnnforiinrange(2,n+1):temp=x+yx=yy=tempreturntemp%1000000007 查看详情

《剑指offer》---斐波那契数列(代码片段)

本文算法使用python3实现1.题目描述:??大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39??时间限制:1s;空间限制:32768K2.思路描述:??实现斐波那契额数列主要有两种方法:??(1)递归... 查看详情

如何用c语言输出斐波那契数列的前n项

参考技术A#include<stdio.h>main()inta=1,b=1,c,s=1;doc=a+b;printf("%d,",a);a=b;b=c;s++;while(s<=10);本回答被提问者采纳 查看详情

用递归和非递归的方法输出斐波那契数列的第n个元素(c语言实现)

费波那契数列(意大利语:SuccessionediFibonacci),又译为费波拿契数、斐波那契数列、费氏数列、黄金分割数列。在数学上,费波那契数列是以递归的方法来定义:{displaystyleF_{0}=0}{displaystyleF_{1}=1}{displaystyleF_{n}=F_{n-1}+F_{n-2}}(n≧2... 查看详情

斐波那契数列的语言实现

...数都是前面两个数的和。要求输入整数n不超过50。C语言实现:#include<stdio.h>intmain(){ inta=1,b=1,c,i,n; scanf("%d",&n); for(i=3;i<=n;i++){ &n 查看详情

递归求斐波那契数列

...,就是递归函数以n为参数,如果N=0,或者n=1,那就直接返回n的值,否则就返回前面两项的函数的和。也就是数列n-1加数列n-2 查看详情

斐波那契数列

...要求输入一个整数n,请你输出斐波那契数列的第n项代码实现1importjava.util.Scanner;2publicclassSolution{3publicintFibonacci(intn){4intfirst=0;5intlast=1;6inttemp=0;7if(n==0)8 查看详情

斐波那契数列(代码片段)

题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=391packagenewcoder;23importjava.util.Scanner;45publicclassMain0767/*8*大家都知道斐波那契数列,现在要求输入一个整数n... 查看详情

剑指offer面试题10.斐波那契数列

...契(Fibonacci)数列的第n项。斐波拉契数列定义如下:C++实现://斐波拉契数列#include<iostream>usingnamespacestd;//递归实现longlongFibonacci1(unsignedintn){if(n<=1){returnn;}returnFibonacci1(n-1)+F 查看详情

创建函数,传递一个数字n,返回斐波那契数列的第n的值。(代码片段)

斐波那契数列 第1项和第2项的值是1,从第3项开始,每项的值是前两项相加的和1  1  2  3  5  8  13  21......法1:functionfn(n)vara=1,b=1;for(vari=3;i<=n;i++)//循环体 查看详情

如何用java语言输出斐波那契数列

Java编程:三种方法实现斐波那契数列其一方法:public class Demo2       // 定义三个变量方法      public static void main(String[] args)      &nbs... 查看详情

1242斐波那契数列的第n项(代码片段)

1242 斐波那契数列的第N项 基准时间限制:1 秒空间限制:131072 KB分值: 0 难度:基础题 斐波那契数列的定义如下: F(0)=0F(1)=1F(n)=F(n-1)+F(n-2)(n>=2) (1,1,2,3,5,8,13,21,34,55,89,144,233,377,...)给出n,求 查看详情

1242斐波那契数列的第n项(代码片段)

1242 斐波那契数列的第N项 基准时间限制:1 秒空间限制:131072 KB分值: 0 难度:基础题 斐波那契数列的定义如下: F(0)=0F(1)=1F(n)=F(n-1)+F(n-2)(n>=2) (1,1,2,3,5,8,13,21,34,55,89,144,233,377,...)给出n,求 查看详情

斐波那契数列的第n项

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1242题目:斐波那契数列的定义如下: F(0)=0F(1)=1F(n)=F(n-1)+F(n-2)(n>=2) (1,1,2,3,5,8,13,21,34,55,89,144,233,377,...)给出n,求F(n),由于结果很大,输出 查看详情

10斐波那契数列(代码片段)

斐波那契数列用JS计算斐波那契数列的第n个值注意时间复杂度0、1、1、2、3、5…简单分析f(0)=0f(1)=1f(n)=f(n-1)+f(n-2)递归-代码演示functionfibonacci(n:number):numberif(n<=0)return0if(n===1)return1returnfibonacci(n- 查看详情

求斐波那契数列的第n项(代码片段)

斐波那契数列介绍斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家列昂纳多·斐波那契(LeonardodaFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13... 查看详情

斐波那契数列(代码片段)

题目描述用JavaScript实现斐波那契数列函数,返回第n个斐波那契数。公式:F(0)=1,F(1)=1,F(n)=F(n-1)+F(n-2)(n>2,n∈N*)1functionfibonacci(n)2if(n==1||n==2)3return1;45else6returnarguments.callee(n-1)+arguments.callee(n-2);//最好用这个7/ 查看详情