2017-08-27 4 views
-5
#include<iostream> 
using namespace std; 

int main() 
{ 
    int fact; 
    for(int i=1; i<=fact; i++) 
    { 
    fact = fact*i; 
    } 
    cout<<fact; 
} 

出力:ガベージ値。増分forループを使用する階乗は、ガベージ値を与える

なぜ私は増分forループを使用して私にこれを与えるが、減少するforループを教えてください。

+4

'fact'ありえないが、その値は不定であることを意味している初期化。 –

+1

'fact'の初期値は何ですか? –

+4

そして、この問題を修正するときは、増加する変数をループの限界として使用することを考えてください。 –

答えて

3

あなたがあなた自身のコードをしたい場合は、値1でyoutは値の事実を初期化しなければならない二つのこと、

1)を行うことができます。

int fact = 1; 

2)このための非常にシンプルな1つのライナーがあります"事実" - もの。私はいつかそれを必要とすれば、私はしばしば自分で使います。

int factorial(int n) 
{ 
    return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n; 
} 
2
#include<iostream> 
using namespace std; 
int main() 
{ 
     int fact,z=1; 
     cin>>fact; 
     for(int i=2; i<=fact; i++) 
     { 
     z= z*i; //use another variable using fact here will lead to a possible infinite loop 
     } 
     cout<<z<<"\n"; 
} 
関連する問題