public class Test{
public static int sum(int num){
if (num <= 1){
return num;
}
return 2 + sum(num -1);
}
public static void main(String []args){
System.out.print(sum(7));
}
}
我试图理解递归?为什么当我运行这段代码时,答案是13?
手写在纸上。首先发生的是sum(7)
。该调用检查num <= 1
,这是假的。所以为了进行下一行,它必须调用sum(6)
。原来的调用被推送到堆栈上,我们开始处理sum(6)
。该调用也通过if
,并调用sum(5)
。
最终我们嵌套了7层深:
sum(7)
sum(6)
sum(5)
sum(4)
sum(3)
sum(2)
sum(1)
现在,在sum(1)调用中,num
是<= 1,因此返回1。关键是,我们要回到哪里?我们返回一层,调用sum(2)。它对sum(1)
的调用返回1。我们给它加2,返回3。
现在,我们在sum(3)
呼叫中。它得到3,所以返回5。
现在,我们在sum(4)
呼叫中。它得到了5,所以返回7。
以此类推。最后,我们到达外部sum(7)
调用。它调用sum(6)
返回11;加2,返回13。
main函数得到13.
sum(1)
= 1。sum(2)
是2 + sum(1)
,所以是3。sum(3)
是2 + sum(2)
,所以是5。sum(4)
=2 + sum(3)
,所以是7。sum(5)
=2 + sum(4)
,所以是9。sum(6)
是2 + sum(5)
,所以是11。sum(7)
是2 + sum(6)
,所以是13。