java 为什么在递归中前后递增运算符不起作用?

cmssoen2  于 2023-04-28  发布在  Java
关注(0)|答案(2)|浏览(178)

我有以下内容:

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++);
        }
        
    }

为什么总是输出0,n次?为什么深度没有增加?

nkoocmlb

nkoocmlb1#

你没有预先增加。你的函数在递增之前传递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);
        }
    }

或(如果要使用后增量)

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);
        }
    }
qyuhtwio

qyuhtwio2#

第一次调用depth时,为n传递了5,为depth传递了0(顺便说一句,一般来说,方法和参数使用相同的名称是个坏主意)。你是这样做的:

System.out.println(depth(5,0));

后来,你这样称呼它:

return depth(n-1, depth++);

让我们看看会发生什么:

  • n中减去1并将结果传递给新的函数调用
  • 传递未更改的depth,然后递增它(depth++计算其初始值并递增它,而++depth将首先递增它并计算结果)

因此,这些是每次调用时ndepth的值:

  • 五、零
  • 四、零
  • 三、零
  • 2、0
  • 1、0
  • 0,0

为了更好地理解这一点,让我们尝试以下内容:

int i = 1;
System.out.println(i++); //1
System.out.println(i); //2
int j = 1;
System.out.println(++j); //2
System.out.println(j); //2

相关问题