我试图理解递归?为什么当我运行这段代码时答案是 13


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。

最新更新