2016-08-20 1 views
-2

なぜこのコードが5を返しますか?最初はif 5%2 = 1を返し、falseならif(1)を返します。なぜそうですか。C++でのif文によるモジュロ動作

#include <iostream> 

using namespace std; 

int fn_test(int i=5) 
{ 
    if(i%2) return i++; 
    else 
    return fn_test(i-1); 
} 
int main() 
{ int test=fn_test(5); 
    cout<< " this is out put " << test; 
    return 0; 
} 
+0

モジューロは整数の除算の余りを与えますので、実際に何を期待しましたか? –

+0

ところで、再帰呼び出し、 '++'、およびデフォルトの引数を削除することで、例を簡略化できます。 – Jarod42

+0

@Hassan '5%2'は' 1'を返します。それは 'true'に相当します。 '0'以外の数値は' true'に変換されます。 –

答えて

1

あなたが気づくよう5%2の結果がゼロでないため、「真」である、1です。ゼロだけが「偽」で、それ以外は「真」です。あなたがiをインクリメントする前にi(すなわち5)の古い値を返すreturn i++を行う意味

+0

私の場合、古い値は5でした。戻り値は++で、このコードでは起こっていない6が返されます。 – Hassan

+0

@Hassanいいえ、 'i ++'の結果は、あなたの '5'の例では* old *の値です。これは' return'が返す値です。インクリメントは失われます。 '++ i' * then *の場合、結果は' 6'になります。 –

+0

わかりました。ありがとうございます。はい、それは私に前の増分値を返します。 – Hassan