Как работает рекурсия?

int func(int n)
 {
    if (n == 1)
    {
        return 1;
    }
    return func(n - 1) + 2;
}

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    int n, d;

    cout << "Який член прогресії за рахунком ? - ";
    //cin >> n;
    
    d = func(4);

    if (d <= 21)
    {
        cout << d << endl;;
    }
    system("pause");
}

Как тут работает рекурсия? Значение n меняется от 4 до 1, как потом работает алгоритм? Нужно найти n-ый член последовательности 1, 3, 5 ... 21 В примере 4-ый спасибо


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

Автор решения: banana
  1. Вызывается func(4) в которой идет проверка не единица ли в параметре, если нет, то вызывается func(3) + 2
  2. Вызывается func(3) в которой идет проверка не единица ли в параметре, если нет, то вызывается func(2) + 2
  3. Вызывается func(2) в которой идет проверка не единица ли в параметре, если нет, то вызывается func(1) + 2
  4. Вызывается func(1) и так как в параметре единица, то она возвращается в п.3
  5. Вместо func(1) + 2, вернулась 1 и мы получаем выражение 1 + 2, которое возвращается в п.2
  6. Вместо func(2) + 2, вернулась 3 и мы получаем выражение 3 + 2, которое возвращается в п.1
  7. Вместо func(3) + 2, вернулась 5 и мы получаем выражение 5 + 2, которое возвращается как результат 7.
→ Ссылка