You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

尾递归方法判定澄清:下述Java斐波那契方法是否为尾递归

判断结论

你的判断完全正确,该Java方法不属于尾递归方法。

判定依据

尾递归的核心判定标准为:递归调用是方法执行的最后一个操作,递归返回后无需执行任何额外运算,可直接将递归返回值作为当前方法的返回结果。满足该条件的递归方法才能被运行时做尾递归优化,复用当前栈帧,无需逐层保留调用栈。

给出的方法实现如下:

public int[] fib(int n)
{
    
    if(n <= 1){
        return (new int[]{n,0});
    }
    else{
        int[] F = fib(n-1);
        return (new int[]{F[0]+ F[1], F[0]});
    }
}

该方法不符合尾递归要求,和你描述的原因完全匹配:

  • 执行fib(n-1)递归调用时,当前方法栈帧无法释放,因为需要预留局部变量空间存储递归返回结果,后续逻辑依赖该返回值
  • 递归调用返回、结果存入局部变量F后,方法还需要执行数组元素读取、数值加法、新数组创建等额外操作,才能生成当前层的返回值
  • 整个执行流程必须逐层保留栈帧,无法通过栈帧复用实现尾递归优化。

内容的提问来源于stack exchange,提问作者Parzival

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:51:25