2017-04-03 367 views
0

在下面的問題中,我在任何一個編譯器上都嘗試了超出時間限制的消息(儘管它們都是在線編譯器)。問題應該是什麼?爲什麼它顯示超出了時間限制?

#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

這非常依賴於您的輸入。 –

+0

在您的機器上安裝獨立編譯器。這不是編譯期,而是運行時問題。您的程序編譯良好,但運行很長時間,這取決於您的輸入。 – ForceBru

回答

4

問題是,你的fact功能從來沒有停止過,因爲while循環永遠不會結束。

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

也許你想這樣的:

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

謝謝....但即使做了你告訴我沒有得到所需的輸出。儘管時間限制消息已經消失 – user1712

+0

@kabby你得到的是什麼而不是所需的輸出? – JeremyP

+1

@kabby請記住,與正常的32位'int'最大的因子就可以計算出當我給5作爲輸入12 – JeremyP

1

這是因爲你的事實函數進入無限循環。

假設你計算一個數x的階乘,這應該是正確的事實函數。

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

這是一個無限循環。這就是爲什麼當超過時間限制時出現錯誤的原因。 將環路替換爲if條件:

int fact(int x) 
{ 
    int ans = 1; 
    if(x!=1) 
     ans=(x*fact(x-1)); 
    return ans; 
} 
相關問題