如何将ES6函数尾递归用法实例改写成长尾递归的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计572个文字,预计阅读时间需要3分钟。
原文:本文字例讲述了ES6函数之尾递归用法。分享给大众提供参考,具体如下:
函数调用自身,称为递归,若尾调用自身,则称为尾递归。
尾递归非常耗内存。因为需要同时保存成千上万的调用状态。
本文实例讲述了es6函数之尾递归用法。分享给大家供大家参考,具体如下:
函数调用自身,称为递归,如果尾调用自身,就称为尾递归。
递归非常耗费内存。因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误(stack overflow)。但是对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。
function factorial(n) { if (n === 1) return 1 return n * factorial(n - 1) }
如果改成尾递归,只保留一个调用记录,复杂度O(1)
function factorial(n, total = 1) { if (n === 1) return total return factorial(n - 1, n * total) } factorial(5)
非尾递归的 Fibonacci 数列实现如下。
本文共计572个文字,预计阅读时间需要3分钟。
原文:本文字例讲述了ES6函数之尾递归用法。分享给大众提供参考,具体如下:
函数调用自身,称为递归,若尾调用自身,则称为尾递归。
尾递归非常耗内存。因为需要同时保存成千上万的调用状态。
本文实例讲述了es6函数之尾递归用法。分享给大家供大家参考,具体如下:
函数调用自身,称为递归,如果尾调用自身,就称为尾递归。
递归非常耗费内存。因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误(stack overflow)。但是对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。
function factorial(n) { if (n === 1) return 1 return n * factorial(n - 1) }
如果改成尾递归,只保留一个调用记录,复杂度O(1)
function factorial(n, total = 1) { if (n === 1) return total return factorial(n - 1, n * total) } factorial(5)
非尾递归的 Fibonacci 数列实现如下。

