#616: 幫我看看哪裡有錯?(用遞迴)


fishwish (Fish)


#include<iostream>
using namespace std;
int f(int n);
int main(){
  int n;
 while(cin>>n){
  if(n==0)
  cout<<n+1<<endl;
  else
  cout<<f(n)<<endl;
 }
 return 0;
 }
int f(int n){
if(n==1)
return 1;
if(n==2)
return 2;
else
return f(n-1)*n;

}

 

我測試了,

結果在n=13時錯了

我不懂為什麼?是溢位嗎??

#618: Re:幫我看看哪裡有錯?(用遞迴)


m80126colin (許胖)


#include<iostream>using namespace std;int f(int n);int main(){  int n; while(cin>>n){  if(n==0)  cout<<n+1<<endl;  else   cout<<f(n)<<endl; } return 0; }int f(int n){if(n==1)return 1;if(n==2)return 2;elsereturn f(n-1)*n;

}

 

我測試了,

結果在n=13時錯了

我不懂為什麼?是溢位嗎??

 

"輸出 n! 結果,結果不大於 263"
是溢位沒錯.....
請使用long long   (-264~232-1)




 

#619: Re:幫我看看哪裡有錯?(用遞迴)


m80126colin (許胖)


#include<iostream>using namespace std;int f(int n);int main(){  int n; while(cin>>n){  if(n==0)  cout<<n+1<<endl;  else   cout<<f(n)<<endl; } return 0; }int f(int n){if(n==1)return 1;if(n==2)return 2;elsereturn f(n-1)*n;

}

 

我測試了,

結果在n=13時錯了

我不懂為什麼?是溢位嗎??

 

"輸出 n! 結果,結果不大於 263" 是溢位沒錯..... 請使用long long   (-264~232-1)

 

 

更正  long long 範圍為 -264~264-1

#622: Re:幫我看看哪裡有錯?(用遞迴)

Unknown User


#include<iostream>using namespace std;int f(int n);int main(){  int n; while(cin>>n){  if(n==0)  cout<<n+1<<endl;  else   cout<<f(n)<<endl; } return 0; }int f(int n){if(n==1)return 1;if(n==2)return 2;elsereturn f(n-1)*n;

}

 

我測試了,

結果在n=13時錯了

我不懂為什麼?是溢位嗎??

 

"輸出 n! 結果,結果不大於 263" 是溢位沒錯..... 請使用long long   (-264~232-1) 

 

 

更正  long long 範圍為 -264~264-1

其實是  long long 範圍是為 -263~263-1

二補數阿 XD