定义
优势
递归非常耗内存,容易发生栈溢出。
但是尾递归,只存在一个调用帧,不会发生栈溢出,相对节省内存。
递归函数的改写
柯里化 =》 将多参数的函数转换成单参数的形式
function tailFactorial(n, total) {if (n === 1) return totalreturn failFactorial(n-1, n * total)}function factorial(n) {return tailFactorial(n, 1)}factorial(5) // 120
function tailFactorial(n, total) {if (n === 1) return totalreturn tailFactorial(n-1, n * total)}function currying(fn, n) {return function(m) {return fn.call(this, m, n)}}const factorial = currying(tailFactorial, 1)factorial(5) // 120
es6 默认值
function factorial(n, total = 1) {if (n === 1) return totalreturn factorial(n - 1, n * total)}factorial(5) // 120
递归的本质是一种循环操作,纯粹的函数式编程没有循环操作命令,所有的循环都用递归实现。
尾递归优化
尾递归之所以要优化,是因为调用栈太多,造成溢出。所以就要减少调用栈。
一种方式是采用 循环回调递归。
