Я просто изучаю рекурсию в C. Я пытался получить факториал числа, используя этот подход. Но результат, который я получаю, просто 0!
Код: // факториал числа:
#include<stdio.h>
int factorial(int n) {
if (n>0) {
return n*factorial(n-1);
}else{
return 0;
}
}
int main() {
int n;
printf("A number: ");
scanf("%d", &n);
int y = factorial(n);
printf("%d", y);
return 0;
}
Вы возвращаете 0
из функции factorial
, когда условие n>0
ложно. Умножение 0
на любое число даст ноль.
Вместо этого вы можете вернуть 1
в случае.
Обратите внимание, что вы возвращаете 0 всякий раз, когда n<=0, что означает, что когда ваша рекурсия доходит до последнего цикла, вы фактически умножаете выходные данные всех ваших предыдущих циклов, созданных в factorial(n-1);
с 0.
вместо этого, если вы находитесь в ситуации, когда n<=0
return 1
что укажет на конец вашего процесса рекурсии.