成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

太原面經(jīng)分享:如何用js實(shí)現(xiàn)返回斐波那契數(shù)列的第n個(gè)值的函數(shù)

Galence / 3214人閱讀

摘要:那其實(shí)這個(gè)問題還可以換個(gè)問法實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)數(shù)字能返回斐波那契數(shù)列的第個(gè)值。文章預(yù)告更多的前端面試分享我都會(huì)第一時(shí)間更新在我的公眾號(hào)閏土大叔里面,歡迎關(guān)注

面試攢經(jīng)驗(yàn),let"s go!

值此高考來臨之際,閑不住的我又雙叒叕出發(fā)去面試攢經(jīng)驗(yàn)了,去了公司交待一番流程后,面試官甩給了我一張A4紙,上面寫著一道js算法筆試題(一開始我并不知道這是在考察js算法),上面寫著“1、1、2、3、5、8......,求第n個(gè)數(shù)的值

不得不承認(rèn),當(dāng)時(shí)我第一眼看這道題大腦里是懵逼的。后來才想起來,這不就是數(shù)學(xué)題里的那個(gè)斐波那契(肥婆納妾)數(shù)列么!從第三個(gè)數(shù)開始,每個(gè)數(shù)都是前兩個(gè)數(shù)的和。

能get到這個(gè)點(diǎn),你已經(jīng)成功了一半了。另一半就是需要你將數(shù)學(xué)公式邏輯轉(zhuǎn)變成js程序邏輯。

那其實(shí)這個(gè)問題還可以換個(gè)問法:實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)數(shù)字n能返回斐波那契數(shù)列的第n個(gè)值。

分析思路

首先,思路很重要,讓我們一起來分析一下,大概的思路是這樣的:

首先我們要把特殊的部分給獨(dú)立出來做個(gè)判斷,哪些數(shù)字是特殊的呢?很明顯是斐波那契數(shù)列的前兩項(xiàng),而斐波那契數(shù)列的前兩項(xiàng)都為1。然后定義三個(gè)變量,firstNum、secondNum、total,分別代表著第一個(gè)數(shù)字,第二個(gè)數(shù)字,還有他們倆之和。
然后通過一個(gè)for循環(huán)遍歷,將firstNum加上secondNum的結(jié)果賦值給total,然后將secondNum的value賦值給firstNum,把total的value賦值給secondNum,以此根據(jù)傳入的n來不斷地循環(huán)疊加,達(dá)到想要的total值,最后return返回出去。

思路說完后,讓我們用js把它實(shí)現(xiàn)出來:

// 可能是最普通的解法

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;

}
面試題的最優(yōu)解

記住,面試官與咱們應(yīng)聘者的思維不同,你應(yīng)聘的時(shí)候你大部分時(shí)間是在想,這道題我會(huì)不會(huì)做,能不能做出來,而他們想的是這道題的最優(yōu)解。

前端的工作,“最優(yōu)解”其實(shí)是一種自我追求進(jìn)步的表現(xiàn)。

除了以上這種辦法,還有什么更好的解決辦法嗎?答案是有的。

先來看看迭代的解法

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));

究竟哪個(gè)才是最優(yōu)解,相信看完文章的你們已經(jīng)有了答案。

可能你們會(huì)問:

那閏土你在筆試時(shí)做出來了么?
你猜~
寫在后面

目前為止我也參加過很多次大大小小的前端面試,確實(shí)也聽說過有不少面試官會(huì)問到一些算法。通常會(huì)涉及的,是鏈表、樹、字符串、數(shù)組相關(guān)的知識(shí)。前端面試對(duì)算法要求不高,似乎已經(jīng)是業(yè)內(nèi)的一種共識(shí)了。雖說算法好的前端面試肯定會(huì)加分,但是僅憑常見的面試題,而不去聯(lián)系需求,很難讓人覺得,算法對(duì)于前端真的很重要。

直到有這么一天,太原這家公司的前端leader給我出了這么一道js算法題之后,還跟我聊了很多內(nèi)容,與我固有的思維產(chǎn)生了強(qiáng)烈的碰撞。面試官還跟我講,他們公司的技術(shù)總監(jiān)是微軟出身,很注重算法這塊,他當(dāng)初應(yīng)聘進(jìn)來的時(shí)候,也是考察的算法。

雖然這次面試被pass了,但是我認(rèn)為工程師都應(yīng)該學(xué)習(xí)算法,我覺得那不僅僅是對(duì)軟件工程思想的培養(yǎng),更是一種對(duì)心智的鍛煉。

文章預(yù)告:更多的前端面試分享我都會(huì)第一時(shí)間更新在我的公眾號(hào)<閏土大叔>里面,歡迎關(guān)注!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108040.html

相關(guān)文章

  • JS專題之memoization

    摘要:前言在計(jì)算機(jī)領(lǐng)域,記憶是主要用于加速程序計(jì)算的一種優(yōu)化技術(shù),它使得函數(shù)避免重復(fù)演算之前已被處理過的輸入,而返回已緩存的結(jié)果。被執(zhí)行了不是素?cái)?shù),其他數(shù)字默認(rèn)是素?cái)?shù)。我們可以看出,如果從開始打印斐波那契數(shù)列,函數(shù)被執(zhí)行了次。 前言 在計(jì)算機(jī)領(lǐng)域,記憶(memoization)是主要用于加速程序計(jì)算的一種優(yōu)化技術(shù),它使得函數(shù)避免重復(fù)演算之前已被處理過的輸入,而返回已緩存的結(jié)果。 -- wi...

    zhisheng 評(píng)論0 收藏0
  • Python全棧之路系列之遞歸

    摘要:所謂遞歸其實(shí)就是函數(shù)本身調(diào)用函數(shù),直到滿足指定條件之后一層層退出函數(shù),例如從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢故事是什么呢從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢故事是什么呢從前有座山,山里有座廟 所謂遞歸其實(shí)就是函數(shù)本身調(diào)用函數(shù),直到滿足指定條件之后一層層退出函數(shù), 例如 從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是...

    kviccn 評(píng)論0 收藏0
  • js 實(shí)現(xiàn)斐波那契數(shù)列(數(shù)組緩存、動(dòng)態(tài)規(guī)劃、尾調(diào)用優(yōu)化)

    摘要:根據(jù)該規(guī)則,返回第個(gè)斐波那契數(shù)。尾遞歸函數(shù)調(diào)用自身,稱為遞歸。一個(gè)前端眼中的斐波那契數(shù)列解斐波那契數(shù)列的實(shí)用解法調(diào)用棧尾遞歸和手動(dòng)優(yōu)化尾調(diào)用優(yōu)化譯我從用寫斐波那契生成器中學(xué)到的令人驚訝的件事 斐波那契數(shù)列是以下一系列數(shù)字: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ... 在種子數(shù)字 0 和 1 ...

    趙連江 評(píng)論0 收藏0
  • 《Python有什么好學(xué)的》之生成器/迭代器

    摘要:為什么是斐波那契談到生成器迭代器,人們總是喜歡用斐波那契數(shù)列來舉例。那么,換句話來說,即能由推導(dǎo)式得出的數(shù)列,其實(shí)都可以用來做生成器迭代器的例子。然而,生成器和生成器類的實(shí)例都屬于迭代器。 Python有什么好學(xué)的這句話可不是反問句,而是問句哦。 主要是煎魚覺得太多的人覺得Python的語法較為簡(jiǎn)單,寫出來的代碼只要符合邏輯,不需要太多的學(xué)習(xí)即可,即可從一門其他語言跳來用Python寫...

    n7then 評(píng)論0 收藏0
  • 每周一練 之 數(shù)據(jù)結(jié)構(gòu)與算法(Queue)

    摘要:與堆棧區(qū)別隊(duì)列的操作方式和堆棧類似,唯一的區(qū)別在于隊(duì)列只允許新數(shù)據(jù)在后端進(jìn)行添加。移除隊(duì)列的第一項(xiàng),并返回被移除的元素。三使用隊(duì)列計(jì)算斐波那契數(shù)列的第項(xiàng)。前兩項(xiàng)固定為,后面的項(xiàng)為前兩項(xiàng)之和,依次向后。 showImg(https://segmentfault.com/img/remote/1460000019005270); 這是第二周的練習(xí)題,這里補(bǔ)充下咯,五一節(jié)馬上就要到了,自己的...

    anquan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<