Факториальная программа c, использующая рекурсивную функцию в C с циклом while - PullRequest
2 голосов
/ 11 февраля 2012

Факториальная программа, использующая рекурсию в c с циклом while. В этой программе, когда выполнение достигает оператора возврата функции, она не возвращается к вызову функции. Вместо этого он выполняет функцию повторно. Кто-нибудь может сказать, пожалуйста, что не так в этой программе.

#include<stdio.h>    
int fact(int n)
{    
    int x=1;    

    while(n>1)    
    {    
        x=n*fact(n-1);    
    }    

    return(x);    
}    

void main()    
{    
    int n,fact1;    
    scanf("%d",&n);    
    fact1=fact(n);    
    printf("%d",fact1);    
}

Ответы [ 10 ]

6 голосов
/ 11 февраля 2012

Причина, по которой ваша программа входит в бесконечный цикл, состоит в том, что цикл

while (n > 1)
    x = n * fact(n-1);

никогда не уменьшается n. Поскольку n никогда не уменьшается, программа никогда не выйдет из цикла. Питер прав в комментариях: измените while на if, и у вас будет факториальная функция, которая правильно обрабатывает все положительные параметры. Однако даже после изменения while на if ваш fact не будет иметь свойства fact(0) == 1, как требуется для правильной факториальной функции.

5 голосов
/ 11 февраля 2012

Это

while(n>1)

вызывает зацикливание. Вы не меняете n внутри цикла, поэтому цикл бесконечен.

Изменить while на if.

3 голосов
/ 06 сентября 2013

Это метод факториала:

public int fact(int n)
    {
        if (n < 1)
        {
            return 1;
        }
        else
        {
            return n * fact(n - 1);
        }
    }
2 голосов
/ 28 апреля 2015

Вы можете использовать простой подход, используя рекурсию

#include <stdio.h>

int fact(int n)
{
    if(n==1)
        return 1;
    else
        return n * fact(n-1);
}
int main()
{
    int f;
    f = fact(5);
    printf("Factorial = %d",f);
    return 0;
}

Читать дальше * Программа 1004 * C для поиска факториала с использованием рекурсии

2 голосов
/ 11 декабря 2013
/*
Write a C++ Program to input a positive number,
Calculate and display factorial of this number
by recursion.
*/
#include<iostream.h>

#include<conio.h>

long  factorial(int n);
void main()
{

  clrscr();

  int number, counter;


  label1:

  cout<<"\n Enter the Number = ";

  cin>>number;

  if ( number < 0)
  {
  cout<<"\n Enter a non negative number, please!";
  goto label1;
  }
  cout<<"\n\n ----------- Results ------------";

  cout<<"\n\n The Factorial of the number "<<number<<"\n is "<<factorial(number);

  getch();

}

long factorial(int n)

{

    if ( n == 0 )
        return 1;
    else
        return n * factorial(n-1);

}
2 голосов
/ 11 июля 2012
#include <stdio.h>
#include <stdlib.h>

/** main returns int, use it! */

int main(int argc, char **argv)
{

if (argc <= 2) {
        if (argv) argc = atoi(argv[1] );
        else return argc;
        }

argc *= main (argc-1, NULL);

if (argv) {
        printf("=%d\n", argc);
        return 0;
        }
return argc;
}
1 голос
/ 11 февраля 2012
/*several versions of a factorial program.*/

#include<stdio.h>
int main()
  {
  int n;
  long factorial;
  printf("Compute the factorial of what number? ");
  scanf("%d", &n);
  factorial = 1L;
  while(n > 0)
    factorial *= n--;
  printf("The factorial is %ld\n", factorial);
  return 0;
  }

 #include<stdio.h>
/*the same, but counting up to n instead of down to 0*/
int main()
  {
  register int count;
  int n;
  long factorial;
  printf("Compute the factorial of what number? ");
  scanf("%d", &n);
  factorial = 1L;
  count = 1;
  while(count <= n)
    factorial *= count++;
  printf("%d! = %ld\n", n, factorial);
  return 0;
  }


 #include<stdio.h>
/*an equivalent loop using 'for' instead of 'while'*/
int main()
  {
  register int count;
  int n;
  long factorial;
  printf("Compute the factorial of what number? ");
  scanf("%d", &n);
  for(factorial = 1L, count = 1; count <= n; count++)
    factorial *= count;
  printf("%d! = %ld\n", n, factorial);
  return 0;
  }
0 голосов
/ 23 марта 2019

Вы можете использовать этот подход.

int factorial(int a)
{
    while(a>1)
    {
        return a*factorial(a-1);
    }
    return 1;


}
0 голосов
/ 13 ноября 2018

Факториальная программа, использующая рекурсию в C с циклом while.

int fact(int n)
{    
    int x=1;    

    while(n>=1)    
    {    
        return(n*fact(n-1));    
    }    

    return(1);    
}
0 голосов
/ 03 апреля 2016
/*WAP to find factorial using recursion*/

#include<stdio.h>
#include<stdlib.h>

int fact1=1;

int fact(int no)
{
    fact1=fact1*no;
    no--;
    if(no!=1)
    {
        fact(no);
    }
    return fact1;
}

int main()
{
    int no,ans;``
    system("clear");
    printf("Enter a no. : ");
    scanf("%d",&no);
    ans=fact(no);
    printf("Fact : %d",ans);
    return 0;
}
...