@JunQiu
2018-12-10T13:46:33.000000Z
字数 2807
阅读 2016
language_js algorithm summary_2018/12
const _ = require('lodash')let list = [1, 2, 3, 4, 5]// _.chainconst res = _.chain(list).filter(n => n % 2 === 0).sum()// wrap value//console.log(res)// 6console.log(res.value())list.push(8)// 14 (The execution of chained methods is lazy),不会立即执行而是调用的时候再执行,比如等待资源加载完成console.log(res.value())let list1 = [1, 2, 3, 4, 5]// _const res1 = _(list1).filter(n => n % 2 === 0)// [ 2, 4 ]console.log(res1.value())// wrap:filter is chainableconsole.log(res1)// 14 sum:not chainableconsole.log(res1.sum())
function factorial(n) {if (n === 1) {return 1}return n*factorial(n - 1)}// 计算过程factorial(5) = factorial(4) * 5factorial(5) = factorial(3) * 4 * 5factorial(5) = factorial(2) * 3 * 4 * 5factorial(5) = factorial(1) * 2 * 3 * 4 * 5factorial(5) = 1 * 2 * 3 * 4 * 5

// examplefunction factorial(n) {// log stack informationconsole.trace()if (n === 1) {return 1}return n * factorial(n - 1)}factorial(3)// log 进行了3次压栈调用Traceat factorial (/Users/qiujun/WebstormProjects/sad-e015/level-1-upgrade-ads-strategy/test.js:32:14)at factorial (/Users/qiujun/WebstormProjects/sad-e015/level-1-upgrade-ads-strategy/test.js:32:14)at factorial (/Users/qiujun/WebstormProjects/sad-e015/level-1-upgrade-ads-strategy/test.js:32:14)at Object.<anonymous> (/Users/qiujun/WebstormProjects/sad-e015/level-1-upgrade-ads-strategy/test.js:35:1)at Module._compile (module.js:652:30)at Object.Module._extensions..js (module.js:663:10)at Module.load (module.js:565:32)at tryModuleLoad (module.js:505:12)at Function.Module._load (module.js:497:3)
// examplefunction factorial(n, total = 1) {if (n === 0) {return total}return factorial(n - 1, n * total)}// 过程factorial(3, 1)factorial(3, 1)factorial(2, 3)factorial(1, 6)在每一步运行中,上一个函数的结果会传到下一次调用的函数中。从而只保证只有一个栈在调用。Tips:node移除了对尾递归的优化。
function factorial (n, total = 1) {while (true) {if (n === 0) {return total}total = n * totaln = n - 1}}
