class Java_code {
public static void main(String args[]){
mymethod(5);
}
static void mymethod(int counter){
if(counter==0){
System.out.println("");
}
else {
System.out.println("Hello" + counter);
mymethod(--counter);
System.out.println("" +counter);
}
}
}
假设我们有上面的程序,当我给出参数5它打印
Hello5
Hello4
Hello3
Hello2
Hello1
之后打印
0
1
2
3
4
,但为什么会打印数字,它是如何发生的?我不明白你怎么会这样帮助我呢?
答案 0 :(得分:1)
请记住,只要反击!= 0
,就会执行这三行System.out.println(“Hello”+ counter);
的MyMethod( - 计数器);
System.out.println(“”+ counter);
最初使用counter = 5调用mymethod()。因此它打印“Hello5”并在它返回之前,它以counter = 4递归调用自身,因此打印“Hello4”并在它返回之前,它以递归方式调用自身counter = 3因此打印“Hello3”并在它返回之前,它以counter = 2递归调用自身,因此打印“Hello2”并在它返回之前,它会以counter = 1递归调用自身,因此打印“Hello1”并在它之前返回时,它以counter = 0递归调用自身,此时它只打印任何内容,但返回给调用者,调用者将执行其余的代码 System.out.println(“”+ counter) 在每个正在进行的先前执行中,所以在返回初始调用函数的过程中,它会分别打印值0,1,2,3,4。答案 1 :(得分:0)
如果仔细观察,可以看到这一行
的MyMethod( - 计数器);
这会降低counter
的值,然后将其作为参数传递给mymethod
只要计数器>这将被调用。 0,然后该方法将一直返回。
在每个方法返回后,将执行System.out.println("" +counter);
。
counter
每次调用都会记住mymethod
的价值
答案 2 :(得分:0)
why does it prints numbers , how does it happen ?
I don't understand how that happens can you help me out on this?
因为你的代码中有这一行
mymethod(--counter);
- >递归调用所以这行直接打印(Hello world 1到5。)
之后只执行此行
System.out.println("" +counter);
答案 3 :(得分:0)
System.out.println("" +counter);
打印这些数字。因为stack unwinding
(每当方法调用发生时,当前状态被推入堆栈)并且因为堆栈是LIFO (Last In first out)
所以它以相反的顺序打印
答案 4 :(得分:0)
如果你在使用递归的任何时候绘制步骤以及变量的当前值,它将帮助你更好地理解发生的事情,因为它可能会在开始时变得混乱,直到你更熟悉它。