2017-04-03 2 views
0

In der folgenden Frage bekomme ich Zeitlimit Nachricht überschritten auf welchem ​​Compiler ich versuchte (obwohl sie alle Online-Compiler waren). Was sollte das Problem sein?Warum wird das Zeitlimit überschritten?

#include <stdio.h> 
int fact(int); 
int main(void) 
{ 
    int num,res; 
    printf("enter any number"); 
    scanf("%d",&num); 
    res=fact(num); 
    printf("%d",res); 
    return 0; 
} 
int fact(int x) 
{ 
    int ans; 
    while(x!=1) 
     ans=(x*fact(x-1)); 
    return ans; 
} 
+0

Dies hängt sehr von Ihrer Eingabe ab. –

+0

Installieren Sie einen eigenständigen Compiler auf Ihrem Computer. Dies ist keine Kompilierzeit, sondern ein Laufzeitproblem. Ihr Programm kompiliert gut, aber läuft für eine lange Zeit, und das hängt von Ihrer Eingabe ab. – ForceBru

Antwort

4

Problem ist, dass Ihre fact Funktion nie da while Schleife gestoppt nie endet.

int fact(int x) 
{ 
    int ans; 
    while(x!=1) 
     ans=(x*fact(x-1)); //X is never changed! 
    return ans; 
} 

Wahrscheinlich wollten Sie dies:

int fact(int x) 
{ 
    int ans = 1; //Set default value for return 
    if(x!=1) //Go recursive only if X != 1 
     ans=(x*fact(x-1)); 
    return ans; 
} 
+0

danke .... aber selbst nach dem, was du gesagt hast, bekomme ich nicht die erforderliche Ausgabe. Obwohl diese Zeitlimitnachricht – user1712

+0

@kabby gegangen ist, was erhalten Sie anstelle der erforderlichen Ausgabe? – JeremyP

+1

@kabby Beachten Sie, dass mit einem normalen 32-Bit "int" das größte faktorielle, das Sie berechnen können, 12 – JeremyP

1

Es ist, weil Ihr Fakt Funktion in Endlosschleife geht.

Angenommen, Sie berechnen Fakultät von einer Zahl x, sollte dies die richtige Faktfunktion sein.

int fact(int x) 
{ 
    if(x!=1) 
     return x*fact(x-1); 
    return 1; 
} 
0
int fact(int x) 
{ 
    int ans; 
    while(x!=1) 
     ans=(x*fact(x-1)); 
    return ans; 
} 

Es ist eine Endlosschleife. Aus diesem Grund erhalten Sie einen Fehler, wenn das Zeitlimit überschritten wird. Ersetzen Sie die Schleife zu einer if-Bedingung:

int fact(int x) 
{ 
    int ans = 1; 
    if(x!=1) 
     ans=(x*fact(x-1)); 
    return ans; 
} 
Verwandte Themen