这算不算尾递归优化?

function heartBeat(context) {
  context.data.timer = setTimeout(() => {
    doSomeThing();
    heartBeat(context);
  }, 1000);
}

heartBeat(this); //this是一个类似Vue实例的东西

其中的context是一个类似于Vue实例的东西。请教这个递归有问题吗?需不需要尾递归优化?

阅读 1.8k
3 个回答

这个不是尾递归。也无法进行尾递归优化。这只是普通的递归。

这根本不是递归,更扯不上什么尾递归优化,就是个回调函数

名词这东西理解了才有用

尾递归的判断条件是,该函数的最后一句是递归调用。

题中 heartBeat 函数中的最后一句是 context.data.timer = ... 这个赋值语句,不是递归调用它自己。

下面这种形式才是尾递归。

function heartBeat(context) {
    // 做一些奇怪的事情,跟 heartBeat 无关
    heartBeat(context);
}

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题