Простой рекурсивный вопрос - PullRequest
1 голос
/ 13 июня 2011

Этот код дает каждый шаг-результат вычисления факториала заданного числа, но я хочу только окончательный.

#include <stdio.h>

long int factorial(int n) {
  if (n <= 1)
    return(1);
  else
    n = n * factorial(n - 1);
  printf("%d\n", n);
  return(n);
}

main() {
  int n;
  printf("Enter n: ");
  scanf("%d", &n);

  //function call
  factorial(n);
  return 0;
}

Ответы [ 6 ]

5 голосов
/ 13 июня 2011

Как насчет этого?

int final;

final = factorial(n);
printf("%d! = %d\n", n, final);

И прекратите использовать printf в функции factorial.

4 голосов
/ 13 июня 2011

Так что не используйте printf внутри вашей рекурсивной функции, а только печатайте возвращаемое значение внутри main().

2 голосов
/ 13 июня 2011

Избегайте использования 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",&n);
    //function call
    f = factorial(n);
    printf("Factorial of %d is %d\n",n,f);     // See the change here ....
    return 0;
}
1 голос
/ 13 июня 2011

Используйте это,

long int factorial(int n) {    
    if (n<=1)      
        return(1);  
    else    
        n=n*factorial(n-1);  
    //printf("%d\n",n);    
    return(n);
} 

main(){ 
    int n, result;  
    printf("Enter n: ");  
    scanf("%d",&n);
    //function call  
    result=factorial(n);
    printf("%d\n",result);    

    return 0;
}
1 голос
/ 13 июня 2011
long int factorial(int n){
     if(n<=1)
        return 1;
     return n*factorial(n-1);
}
0 голосов
/ 23 июля 2016

[Этот ответ был первоначально отредактирован в вопросе оригинальным постером, заменив неправильный код.Вопрос был восстановлен и решение опубликовано в ответе этого вики-сообщества.]


Переработан код, и теперь он выглядит следующим образомСпасибо за предложения.

#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! = %d\n", n, result);
    return 0;
}

main()
{
    int n;
    printf("Enter n: ");
    scanf("%d",&n);
    //function call
    final(n);
    return 0;
}
...