Study Notes

Study Notes

  • Source
  • WebDesign
  • Javascript

›Basic Algorithm Script

Basic Javascript

  • Basic JavaScript Overview

ES6

  • ES6 Overview

Regular expression

  • Regular Expression Overview
  • Lookahead
  • Capture Group

Debugging

  • Debugging Overview

Object Oriented Programming

  • Object Oriented Programming Overview
  • Mixin
  • Closure
  • IIFE

Functional Programming

  • Functional Programming

Basic Algorithm Script

  • Reverse a String
  • Factorialize a Number
  • Find the Longest Word in a String
  • Return Largest Numbers In Arrays
  • Repeat a String
  • Truncate a String
  • Finders Keepers
  • Boo Who
  • Title Case a Sentence
  • Slice and Splice
  • Falsy Bouncer
  • javascript-algorithms-anddata-structures/basic-algorithm-scripting/where-do-i-belong
  • Mutations
  • Chunky Monkey

Intermediate Algorithm Script

  • Sum All Numbers in a Range
  • Diff Two Arrays
  • Seek and Destroy
  • Wherefor Art Thou
  • Spinal Tap Case
  • Search and Replace
  • DNA Pairing
  • Missing letters
  • Sorted Union
  • Convert HTML Entities
  • Sum All Odd Fibonacci Numbers
  • Smallest Common Multiple
  • Drop it
  • Steamroller
  • Binary Agents
  • Everything Be True
  • Arguments Optional
  • Make a Person
  • Map the Debris

Factorialize a Number

这个练习是一个阶乘的算法,第一眼看到的时候,首先会想到用递归,但是第一个排除不用的方法也是递归,主要的原因在于递归占资源。如果数据量比较大,那么调用栈所占的资源也就越多。

因此我首先想到的是使用 for 循环去完成阶乘算法。

function factorialize(num) {
  let factorial = 1;
  for(let i = num; i > 0; i--) {
    factorial *= i;
  }
  return factorial;
}

factorialize(5);

然后我看了一下 freeCodeCamp 给出的解决方式,是利用递归去实现阶乘算法。

function factorialize(num) {
  if (num === 0) { return 1; }
  return num * factorialize(num-1);
}

factorialize(5);

既然用递归,那么就可以利用 ES6 中的尾调用优化,关于什么是尾调用优化以及对调用栈的优化是怎样的,可以参考一下 Nicholas C. Zakas Understanding ECMAScript 6 Tail Call Optimization 以及阮一峰的《ECMAScript》尾调用优化。

下面是使用尾调用优化的阶乘实现方式:

const factorialize = (num, factorial=1) => {
  if (num === 0) {
    return factorial;
  }
  return factorialize(num -1 , factorial * num);
}
← Reverse a StringFind the Longest Word in a String →
Copyright © 2019 罗惠东