你如何在中间留下一个功能?我有离开这个功能的条件,但我不知道如何离开。
例如:
void a(int &num){
if (num > 100){
// leave function
}
num += a(num + 1);
}
我想结束递归,我必须保持函数void
答案 0 :(得分:10)
void a(int &num){
if (num > 100){
return;
}
num += a(num + 1);
}
正如Martin York的评论所指出的那样,我在没有考虑问题的每个方面的情况下都跳了回答,为此我道歉。你想要的可能是:
int a(int num)
{
if (num > 100)
return num;
return num + a(num + 1);
}
答案 1 :(得分:6)
没有什么可以阻止你在函数中间放置一个return
,尽管有些人可能会说这是一种糟糕的风格。
这个想法的主要动机是,如果你的函数中有多个返回点,那么维护清理代码会更加困难,必须在每次返回时传播;但是,使用现代RAII pattern(如果你希望你的代码是异常安全的,那就是必需的)你应该没有多个退出点的问题:清理代码(包含在资源的析构函数中)无论如何都会被召唤。
答案 2 :(得分:3)
您可以使用return。
但你需要一个值:
int a(int num)
{
if (num > 100)
{
return num;
}
num += a(num + 1);
return num;
}
答案 3 :(得分:1)
void a(int num)
{
if (num > 100)
{
}
else
{
num += a(num + 1);
}
}
答案 4 :(得分:0)
由于函数返回一个值,因此需要给出一个带有值的return
语句:
int a(int num){
if (num > 100){
return 100;// leave function
}
num += a(num + 1);
return num;
}
对于未返回值的函数,请使用return;
。
答案 5 :(得分:0)
int a(int num){
if (num > 100){
return num; // or return 100;
}
num += a(num + 1);
return num;
}
顺便说一句,如果您使用引用(int& num),则不能将num + 1作为参数传递。
答案 6 :(得分:0)
你可以使用这样的东西。请注意,由于它是一个void函数,因此不需要返回值。而且空虚是空的。
void a(int &num){
if (num > 100){
return;
}
num += a(num + 1);
}
但我宁愿看到上面的代码示例。
void a(int &num){
if(!(num >100)){
num += a(num + 1);
}
}
答案 7 :(得分:-2)
有些人不喜欢在函数中有多个return语句:
void a(..)
{
if (...)
goto end;
....
end:
return;
}
另一方面,我认为他们是愚蠢的。
是的,我已经看过了。