Оператор повернення передає значення прямому виклику кадру виклику поточної функції. У випадку рекурсії цей негайний абонент може стати ще одним викликом тієї самої функції.
У більшості мов, якщо ви не використовуєте повернене значення функції, яку ви викликали (рекурсивно чи ні), або повернене значення відкидається, або це діагностична помилка. Існують деякі мови, де значення повернення останнього виклику функції автоматично повторно використовується як зворотне значення поточного виклику функції, але вони не розрізняють нормальні та рекурсивні виклики функції.
Припускаючи, що невикористані значення повернення мовчки відкидаються, якщо ви написали такий код:
list *search_list(list *l, item_type x) {
if (l == NULL) return(NULL);
if (l->item == x)
return(l);
else
search_list(l->next, x); // no return!
}
то search_list
повертає лише визначене значення для порожнього списку (NULL) або якщо перший елемент відповідає значенню, яке ви шукаєте. Як тільки функція переходить у рекурсивний виклик, ви не знаєте, який буде результат, оскільки результат рекурсивного виклику відкидається.
Крім того, ви обіцяєте повернути значення зі своєї функції, але у вас є шлях (рекурсивний), де ви не вказуєте, яке значення повертати. Залежно від мови, якою ви користуєтеся, це зазвичай призводить до обов'язкової діагностики або до невизначеної поведінки (що є скороченням: все може статися, і це може змінитися в будь-який час без попередження. Не тримайте нікого, крім себе відповідальності, якщо він закрутить Ваша найважливіша презентація). Існують деякі ситуації, коли може повернутися відсутнє значення повернення, але це може змінитися наступного разу, коли ви запустите програму (з рекомпіляцією або без неї).
return
робить останній .