Выдаёт -nan(ind)

В двух идентичных примерах коды работают по разному:

double f2(int n, double a, int x) {
a += sin(x * n);
if (1 < n){
    n--;
    f2(n, a, x);
}
else {
    return a;
}}

В данном случае выдаётся: -nan(ind)

void f3(int n, double a, int x) {
a += sin(x * n);
if (1 < n) {
    n--;
    f3(n, a, x);
}
else{
    cout << "third = " << a << endl;
}}

Здесь же ответ выдаётся правильный, хотя смысл решения тот же!!! Почему в пером случае в качестве ответа какая-то фигня??? Функция вызывается со следующими параметрами: a = 0,n = 2,x = 2


Ответы (1 шт):

Автор решения: AlexGlebe

В первом случае вы не возвращаете значение из функции (нет команды return при условии (1 < n)). Возвращается именно неопределёнка. Нужно возвращать результат. Вот пример, всегда возвращаю. Компилятор должен был вам сообщить предупреждением, а вы исправить.

double f2(int n, double a, int x) {
  a += sin(x * n);
  if (1 < n){
    n--;
    a = f2(n, a, x); }
  return a; }
→ Ссылка