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

递归中前后置自增运算符失效?为何depth始终输出0?

递归中自增运算符未生效的原因解析

先看你提供的代码:

public static void main(String[] args){
        Screen.clear();
        System.out.println(depth(5,0));
        
    }

public static int depth(int n, int depth){
        System.out.println(depth);
        if(n == 0)return depth;
        else{
           System.out.println(depth);          
           return depth(n-1, depth++);
        }
        
    }

核心问题:后置自增运算符的执行逻辑

你使用的depth++是后置自增运算符,它的执行顺序是:

  1. 先返回变量depth的当前值(也就是0)作为参数传递给下一层递归;
  2. 完成参数传递后,才对当前方法内的depth变量执行自增操作。

但Java的方法参数是值传递,下一层递归的depth是独立的局部变量,当前层的depth自增完全不会影响下一层。所以每一次递归调用,传递的都是原始的0,导致每一层输出的depth都是0,最终返回值也是0。

前置自增也不是最优解

如果换成前置自增++depth,确实会先自增再传递值,下一层能拿到递增后的数值,但这种写法容易混淆——因为当前层的depth变量和下一层的是完全独立的,自增操作只是在当前层修改了局部变量,再把新值传进去,本质和直接传depth+1没有区别,却多了变量修改的副作用。

正确的写法

最清晰且无歧义的方式是直接传递depth + 1,避免自增运算符的混淆:

public static int depth(int n, int depth){
        System.out.println(depth);
        if(n == 0)return depth;
        else{
           System.out.println(depth);          
           return depth(n-1, depth + 1);
        }
    }

这样每一层递归都会拿到上一层depth加1后的新值,输出会依次是0、0、1、1、2、2、3、3、4、4、5,最终返回5,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:05:27