рекуррентная функция выводит одинаковые числа, а должна ( по сути ) разные

#include <stdio.h>
#include <math.h>
#include <iostream>

using namespace std;

double fact(int N)
{
    if (N == 0)
    {
        return 0;
    }
    else
    {
        return((fact(N - 1) + 1) / N);
    }
}

int main()
{
    int N;
    printf("input a number N");
    scanf_s("%d", &N);
    int rep = 0;
    while (rep != N)
    {
        cout << fact(N) << ' ';
        rep = rep + 1;
    }
}

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

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

Во первых - не рекуррентная, а рекурсивная. Причём - прямо рекурсивная. У Вас это записано в строке:

return((fact(N - 1) + 1) / N);

Во вторых, почему функция fact имеет тип double, если речь идёт об int ?

Ну и, наконец, если это действительно вычисление факториала, то оператор возврата из функции надо написать так:

return((fact(N - 1) * N);

а когда N==0, то return 1 а вовсе не ноль! Читайте определение функции факториал.

Ну и самое главное: числа печатаются одинаковые потому, что аргумент функции одинаковый! Он не меняется... На самом деле нужно так:

int rep = 0;
while (rep != N)
{
    cout << fact(rep) << ' ';
    rep = rep + 1;
}
→ Ссылка