在堆栈的最后一次调用中,num等于0,那么为什么代码不返回0?
public static int Add(int num) {
return(num == 0 ? 0 : num + Add(num - 1));
}
int num = 7;
答案 0 :(得分:0)
我相信您的困惑在于,最后一个return语句不会直接将0
返回到main()
。相反,return
语句将返回给函数的调用者。在这种情况下,呼叫者将是自己。这是将1
传递到Add()
的极其简单的情况的可视化效果:
//num == 1
//Since num != 0, we will return num + Add(num - 1)
//But the compiler doesn't know what Arr(num -1) is
return num + ______;
在空白处Add(num -1)
的结果将到达。当前对Add()
的调用被压入堆栈,并且对Add(num -1)
的新调用被调用:
public static int Add(int num) {
return(num == 0 ? 0 : num + Add(num - 1));
}
这里num == 0
,因此该方法返回0
。 但不是主要内容。它返回到上一次对Add()
的调用,就在理论空白处。所以:
return num + ______;
成为
return num + 0;
由于这是堆栈上的最后一次调用,因此将返回到主程序,并返回1
,这对于调用Add(1)
的简单情况是正确的