Простой вопрос о рекурсии

#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;
}