2010-12-02 2 views
0

Как вы можете оставить функцию посередине? У меня есть условие для выхода из функции, но я не знаю, как фактически уйти.Нарушение функции в C++

например:

void a(int &num){ 
    if (num > 100){ 
     // leave function 
    } 
    num += a(num + 1); 
} 

я хочу закончить рекурсию, и я должен держать функцию а void

+5

Что? `a` возвращает` void`, как вы можете сделать `num + = a (anything);`? И как `num + 1` связывается с неконстантной ссылкой? Есть ли `int a (int num);` где-то, так что последний вызов не является прямым рекурсивным? Не то, чтобы это имело значение в этом случае, потому что я не думаю, что это влияет на ответ, но в целом вы получите более качественные ответы на вопрос о реальном коде. – 2010-12-02 21:17:57

ответ

0

Поскольку функция возвращает значение, то return заявление со значением должно быть дано :

int a(int num){ 
    if (num > 100){ 
     return 100;// leave function 
    } 
    num += a(num + 1); 
    return num; 
} 

Для функций не возвращает значение, используйте return;.

6

Ничто не мешает вам положить return в середине функции, хотя некоторые люди могут утверждать, что это плохой стиль.

Главной мотивацией для этой идеи является то, что если у вас есть несколько точек возврата в вашей функции, более сложно поддерживать код очистки, который должен быть распространен при каждом возврате; однако, используя современный RAII pattern (который необходим, если вы хотите, чтобы ваш код был безопасным для исключения), у вас не должно быть проблем с наличием нескольких точек выхода: код очистки (который содержится в деструкторах объектов, содержащих ресурсы) все равно.

10
void a(int &num){ 
    if (num > 100){ 
     return; 
    } 
    num += a(num + 1); 
} 

Как указано в комментариях Мартин-Йорк, я вскочил на ответ, не принимая во внимание все аспекты этого вопроса, и за это я прошу прощения. Вероятно, вы хотите:

int a(int num) 
{ 
    if (num > 100) 
     return num; 
    return num + a(num + 1); 
} 
+1

Вы можете написать `num + = a (num + 1);` Функция a() не возвращает значение. Пожалуйста, убедитесь, что он компилируется перед отправкой. – 2010-12-02 21:21:42

+2

Martin York: Разве вы не имеете в виду «вы не можете писать» num + = a (num + 1); `?? Как вы сказали, `a()` не возвращает значение. – gablin 2010-12-02 21:26:23

3

Вы можете использовать возврат.

Но вам значение:

int a(int num) 
{ 
    if (num > 100) 
    { 
     return num; 
    } 
    num += a(num + 1); 
    return num; 
} 
+3

Его функция возвращает void. – Puppy 2010-12-02 21:11:38

0
int a(int num){ 
    if (num > 100){ 
     return num; // or return 100; 
    } 
    num += a(num + 1); 
    return num; 
} 

Кстати, если ваш используют ссылки (INT & Num) вы не можете передать Num + 1 в качестве параметра.

1
void a(int num) 
{ 
    if (num > 100) 
    { 
    } 
    else 
    { 
     num += a(num + 1); 
    } 
} 
-2

Некоторые люди не любят, чтобы иметь больше чем один оператор возврата в функции:

void a(..) 
{ 
    if (...) 
    goto end; 
    .... 
end: 
    return; 
} 

I, с другой стороны, думаю, что они глупы.

Да, я это видел.

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); 
    } 
} 
Смежные вопросы