繁体   English   中英

三元运算符如何在此递归代码中工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM