рекуррентная функция выводит одинаковые числа, а должна ( по сути ) разные
#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;
}