#c #recursion #factorial
#c #рекурсия #факториал
Вопрос:
Этот код выдает каждый шаг-результат вычисления факториала заданного числа, но я хочу только конечный.
#include <stdio.h>
long int factorial(int n) {
if (n <= 1)
return(1);
else
n = n * factorial(n - 1);
printf("%dn", n);
return(n);
}
main() {
int n;
printf("Enter n: ");
scanf("%d", amp;n);
//function call
factorial(n);
return 0;
}
Ответ №1:
Как насчет этого?
int final;
final = factorial(n);
printf("%d! = %dn", n, final);
И прекратите использовать printf
в factorial
функции.
Ответ №2:
Поэтому не используйте printf
внутри своей рекурсивной функции, а только выводите возвращаемое значение внутри main()
.
Ответ №3:
Избегайте использования printf();
в рекурсивной функции.
Запись printf();
внутри рекурсивной функции означает печать значения каждый раз. Итак, просто поместите его вне функции.
Вот так :
#include <stdio.h>
long int factorial(int n) {
if (n<=1)
return(1);
else
n=n*factorial(n-1);
return(n);
}
main() {
int n,f;
printf("Enter n: ");
scanf("%d",amp;n);
//function call
f = factorial(n);
printf("Factorial of %d is %dn",n,f); // See the change here ....
return 0;
}
Ответ №4:
long int factorial(int n){
if(n<=1)
return 1;
return n*factorial(n-1);
}
Комментарии:
1. или вы можете вернуть таким образом также return ((n<=1) ? 1 : n * факториал (n-1))
Ответ №5:
Используйте это,
long int factorial(int n) {
if (n<=1)
return(1);
else
n=n*factorial(n-1);
//printf("%dn",n);
return(n);
}
main(){
int n, resu<
printf("Enter n: ");
scanf("%d",amp;n);
//function call
result=factorial(n);
printf("%dn",result);
return 0;
}
Ответ №6:
[Этот ответ был первоначально отредактирован в вопросе оригинальным постером, заменив неправильный код. Вопрос был восстановлен, а решение повторно опубликовано в этом вики-ответе сообщества.]
Переработал код, и теперь он выглядит так. Спасибо за предложения.
#include <stdio.h>
long int factorial(int n)
{
if (n<=1)
return(1);
else
n=n*factorial(n-1);
return(n);
}
int final(int n)
{
int result = factorial(n);
printf("%d! = %dn", n, result);
return 0;
}
main()
{
int n;
printf("Enter n: ");
scanf("%d",amp;n);
//function call
final(n);
return 0;
}