提问者:小点点

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


我有以下几点:

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次?为什么深度没有增加?


共2个答案

匿名用户

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

匿名用户

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

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

稍后,你这样称呼它:

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

让我们看看会发生什么:

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

因此,这些是每次调用时n深度的值:

  • 5, 0
  • 4, 0
  • 3, 0
  • 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