4

に問題がありoptional parametersますrecursive functions

サンプルコードは次のとおりです。

private static void RecursiveFunction(int x, int optional = 0)
{
    if (x < 5)
        RecursiveFunction(x + 1, optional++);
}

関数を呼び出すとき:

RecursiveFunction(0);

次の結果が得られましstring.Format("{0} - {1}", x, optional)た(イミディエイトウィンドウでこのコードを呼び出すだけです)。

"0 - 0"
"1 - 0"
"2 - 0"
"3 - 0"
"4 - 0"

ここに何か足りないものがありますか?ありがとう!

4

5 に答える 5

8

から変更する:

RecursiveFunction(x + 1, optional++);
//                               ^^

に:

RecursiveFunction(x + 1, ++optional);
//                       ^^

最初のものはアクションを実行し、次にインクリメントしますoptional
2つ目は、増分後にアクションを実行しますoptional

MSDNから:

++ var
var ++

最初の形式はプレフィックスインクリメント操作です。演算の結果は、インクリメントされた後のオペランドの値です。

2番目の形式は、接尾辞のインクリメント操作です。演算の結果は、インクリメントされる前のオペランドの値です。

于 2012-11-12T07:57:12.607 に答える
3

あなたは最初に電話をかけRecursiveFunction、次に増加しoptionalました。最初に増やす必要があります。

private static void RecursiveFunction(int x, int optional = 0)
{
    if (x < 5)
        RecursiveFunction(x + 1, ++optional);
}
于 2012-11-12T07:57:38.337 に答える
3

電話をかける前にインクリメントする必要があります

RecursiveFunction(x + 1, ++optional);
于 2012-11-12T07:58:34.310 に答える
1

メソッド呼び出し++optionalの代わりに使用します。optional++

を使用optional++すると、インクリメントされた値がパラメーターとして関数に0渡されるのではなく、各関数呼び出しに渡されます。電話は次のようになります。

RecursiveFunction(x + 1, ++optional);
于 2012-11-12T07:57:20.297 に答える
1

はい、

++optional代わりに行う必要がありますoptional++

于 2012-11-12T07:57:48.370 に答える