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