Skip to content
This repository has been archived by the owner on Sep 8, 2018. It is now read-only.

Latest commit

 

History

History
48 lines (40 loc) · 924 Bytes

传统递归和尾调用的实现.md

File metadata and controls

48 lines (40 loc) · 924 Bytes

递归最经典的写法

//传统递归写法
function factorial(n) {
  if(n === 0) {
    return 1
  } else {
    return n * factorial(n - 1)
  }
}

factorial(4) // 24
//4 * factorial(3)
//4 * 3 * factorial(2)
//4 * 3 * 2 factorial(1)
//4 * 3 * 2 * 1

尾调用优化

1、有人认为尾调用优化需要柯里化函数来实现。

function factorial(n, res) {
    if (n == 1) return res;
    return factorial(n - 1, n * res)
}
var _Factorial = curry(factorial, _, 1)

_Factorial(4)

2、我们可以借助函数默认参数的方式去实现尾调用函数。

function factorial(n, s=1) {
  if(n < 0) throw Error('传入的参数不能小于0')
  if(n <= 1) {
    return s
  }
  s = n * s
  return factorial(n-1, s)
}
factorial(4) // 24

更多编程小技巧,请关注专栏 前端架构经验分享