为了账号安全,请及时绑定邮箱和手机立即绑定

关于尾递归优化的问题

关于尾递归优化的问题

www说 2018-10-31 16:11:54
在js函数式编程中由一个尾递归的问题。http://es6.ruanyifeng.com/#do...尾调用优化function fibonacciTail(n, a = 0, b = 1) {    if (n === 0) return a  return fibonacciTail(n - 1, b, a + b)}可以是实现尾递归优化的一个典型例子,在这里,每次调用后递归传入 fibonacciTail 函数的 n 会依次递减 1,它实际上是用来记录递归剩余的次数。而 a 和 b 两个参数在每次递归时也会在计算后再次传入 fibonacciTail 函数,写成调用栈的形式就很清楚了:可以看到,每次递归都不会增加调用栈的长度,只是更新当前的堆栈帧而已。也就避免了内存的浪费和爆栈的危险。(以上是摘抄的)同样类似的一个例子function sum(x, y) {  if (y > 0) {    return sum(x + 1, y - 1);  } else {    return x;  }}sum(1, 100000)为什么会爆栈呢?为什么不可以类推成这个函数内部函数并未引用外层函数的内部变量,两个变量x,y均为引用外部变量。 问题的关键难道是 return x返回的不是一个尾调函数么?
查看完整描述

目前暂无任何回答

  • 0 回答
  • 0 关注
  • 650 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号