0

私はCを学んでいて、この例を思いついた

     #include <stdio.h>

     int MyAdd(int);
     main ()
     {
          int i;
          int c = 0;
          c = MyAdd(5); 
          printf("%d\n", c);
     }

     int MyAdd(int a)
     {
          if(a > 0)
               return a + MyAdd(--a);
          else
               return 0;
     }

私はこれを自分で実行し、15 を計算します。1回目で、5+(機能をもう一度実行)などを取得しませんか..?

4

2 に答える 2

6

式で使用すると、基本的にコンパイラに翻弄されるため、副作用演算子は面白くて予期しないことを行います。

この場合、コンパイラはa + MyAdd(--a)最初のオペランドの前に の 2 番目のオペランドを評価しています。したがって、追加で使用する前に変数をデクリメントしています。

いずれにせよ、デクリメント演算子は実際には必要ありません。行を次のように書き直すことをお勧めしreturn a + MyAdd(a - 1);ます。

于 2013-11-15T10:58:18.257 に答える