Java如何输出方法的初始值';在它进入方法的第一个递归之前,是s变量吗?

Java如何输出方法的初始值';在它进入方法的第一个递归之前,是s变量吗?,java,recursion,Java,Recursion,你知道如何打印经典阶乘递归中使用的初始变量吗?这是我的 public class factorial{ public static void main(String[] args){ System.out.println("Output:" + initialN(factorial(4))); System.out.println("Answer:24"); } public static int factorial(int n){ if(n == 1){

你知道如何打印经典阶乘递归中使用的初始变量吗?这是我的

public class factorial{
  public static void main(String[] args){
    System.out.println("Output:" + initialN(factorial(4))); 
    System.out.println("Answer:24");
  }

  public static int factorial(int n){
    if(n == 1){
      return 1;
    }
    else{
      return n*(n-1);
    }
  }

  public static int initialN(int n){
    int init = n;
    System.out.println("N:" + init); return init;
  }
}
现在,我的输出如下所示:

N:24
Output:24
Answer:24
System.out.println(factorial3(4));

但是我试图让它在进入阶乘方法的第二次迭代之前只显示n最初是什么。所以N应该显示为4,而不是24。提前感谢。

您只需更改此行:

System.out.println("Output:" + factorial(initialN(4))); 
您应该在factorial内部调用
initialN()
,因为这些方法是从内部然后从外部执行的

作为旁注,我会这样写:

public static int factorial3(int num){ 
if(num == 0)
  return 1;
else{
  if(i==0) \\ i is global variable initialized to zero
   System.out.println("N:" + num);
  i++;
  return num * factorial3(num-1);
  }
}
这样称呼它:

N:24
Output:24
Answer:24
System.out.println(factorial3(4));

您只需更改此行:

System.out.println("Output:" + factorial(initialN(4))); 
您应该在factorial内部调用
initialN()
,因为这些方法是从内部然后从外部执行的

作为旁注,我会这样写:

public static int factorial3(int num){ 
if(num == 0)
  return 1;
else{
  if(i==0) \\ i is global variable initialized to zero
   System.out.println("N:" + num);
  i++;
  return num * factorial3(num-1);
  }
}
这样称呼它:

N:24
Output:24
Answer:24
System.out.println(factorial3(4));

您只需更改此行:

System.out.println("Output:" + factorial(initialN(4))); 
您应该在factorial内部调用
initialN()
,因为这些方法是从内部然后从外部执行的

作为旁注,我会这样写:

public static int factorial3(int num){ 
if(num == 0)
  return 1;
else{
  if(i==0) \\ i is global variable initialized to zero
   System.out.println("N:" + num);
  i++;
  return num * factorial3(num-1);
  }
}
这样称呼它:

N:24
Output:24
Answer:24
System.out.println(factorial3(4));

您只需更改此行:

System.out.println("Output:" + factorial(initialN(4))); 
您应该在factorial内部调用
initialN()
,因为这些方法是从内部然后从外部执行的

作为旁注,我会这样写:

public static int factorial3(int num){ 
if(num == 0)
  return 1;
else{
  if(i==0) \\ i is global variable initialized to zero
   System.out.println("N:" + num);
  i++;
  return num * factorial3(num-1);
  }
}
这样称呼它:

N:24
Output:24
Answer:24
System.out.println(factorial3(4));

我明白了。如果从另一个方法调用递归方法,则可以打印初始变量。这是我的解决办法。我很想知道是否有人有更简单的解决方案

public class factorial{
  public static void main(String[] args){
    System.out.println("Output:" + (factorial(3))); System.out.println("Answer:6");
    System.out.println("Output:" + (factorial(4))); System.out.println("Answer:24");
    System.out.print("--------------------");
  }     

  public static int factorial(int n){
    System.out.println("--------------------\nN:" + n);
    return factorial2(n);
  }

  public static int factorial2(int n){
    if(n == 1){
    return 1;
    }
    else{
      return n*factorial2(n-1);
    }
  }
}

我明白了。如果从另一个方法调用递归方法,则可以打印初始变量。这是我的解决办法。我很想知道是否有人有更简单的解决方案

public class factorial{
  public static void main(String[] args){
    System.out.println("Output:" + (factorial(3))); System.out.println("Answer:6");
    System.out.println("Output:" + (factorial(4))); System.out.println("Answer:24");
    System.out.print("--------------------");
  }     

  public static int factorial(int n){
    System.out.println("--------------------\nN:" + n);
    return factorial2(n);
  }

  public static int factorial2(int n){
    if(n == 1){
    return 1;
    }
    else{
      return n*factorial2(n-1);
    }
  }
}

我明白了。如果从另一个方法调用递归方法,则可以打印初始变量。这是我的解决办法。我很想知道是否有人有更简单的解决方案

public class factorial{
  public static void main(String[] args){
    System.out.println("Output:" + (factorial(3))); System.out.println("Answer:6");
    System.out.println("Output:" + (factorial(4))); System.out.println("Answer:24");
    System.out.print("--------------------");
  }     

  public static int factorial(int n){
    System.out.println("--------------------\nN:" + n);
    return factorial2(n);
  }

  public static int factorial2(int n){
    if(n == 1){
    return 1;
    }
    else{
      return n*factorial2(n-1);
    }
  }
}

我明白了。如果从另一个方法调用递归方法,则可以打印初始变量。这是我的解决办法。我很想知道是否有人有更简单的解决方案

public class factorial{
  public static void main(String[] args){
    System.out.println("Output:" + (factorial(3))); System.out.println("Answer:6");
    System.out.println("Output:" + (factorial(4))); System.out.println("Answer:24");
    System.out.print("--------------------");
  }     

  public static int factorial(int n){
    System.out.println("--------------------\nN:" + n);
    return factorial2(n);
  }

  public static int factorial2(int n){
    if(n == 1){
    return 1;
    }
    else{
      return n*factorial2(n-1);
    }
  }
}

为什么不打印初始值,然后计算阶乘呢?因为初始值只在调用方法后设置。如果我尝试在方法之前调用该值,它将中断,因为该值尚不存在。为什么不打印初始值,然后计算阶乘?因为初始值仅在调用该方法后设置。如果我尝试在方法之前调用该值,它将中断,因为该值尚不存在。为什么不打印初始值,然后计算阶乘?因为初始值仅在调用该方法后设置。如果我尝试在方法之前调用该值,它将中断,因为该值尚不存在。为什么不打印初始值,然后计算阶乘?因为初始值仅在调用该方法后设置。如果我尝试在方法之前调用该值,它将中断,因为该值还不存在。谢谢。这是我自己想出来的。但我确实从你的回答中学到了一些东西。请确认当从另一个方法内部调用一个方法时,调用最内部的方法,然后调用向外工作的方法?在递归的情况下,递归在向外移动到下一个方法之前完成,对吗?你是对的。在方法内部调用方法时,始终首先调用最内部的方法。对于递归,这也是正确的。谢谢。这是我自己想出来的。但我确实从你的回答中学到了一些东西。请确认当从另一个方法内部调用一个方法时,调用最内部的方法,然后调用向外工作的方法?在递归的情况下,递归在向外移动到下一个方法之前完成,对吗?你是对的。在方法内部调用方法时,始终首先调用最内部的方法。对于递归,这也是正确的。谢谢。这是我自己想出来的。但我确实从你的回答中学到了一些东西。请确认当从另一个方法内部调用一个方法时,调用最内部的方法,然后调用向外工作的方法?在递归的情况下,递归在向外移动到下一个方法之前完成,对吗?你是对的。在方法内部调用方法时,始终首先调用最内部的方法。对于递归,这也是正确的。谢谢。这是我自己想出来的。但我确实从你的回答中学到了一些东西。请确认当从另一个方法内部调用一个方法时,调用最内部的方法,然后调用向外工作的方法?在递归的情况下,递归在向外移动到下一个方法之前完成,对吗?你是对的。在方法内部调用方法时,始终首先调用最内部的方法。在递归的情况下,这也是正确的。