[英]How does the ternary operator work in this recursive code?
在堆栈的最后一次调用中,num将等于0,那么为什么代码不返回0?
public static int Add(int num) {
return(num == 0 ? 0 : num + Add(num - 1));
}
int num = 7;
我相信您的困惑在于以下事实:最后一个return语句不会直接向main()
返回0
。 相反, 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)
的简单情况是正确的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.