0

この再帰的な謎の解明に近づいています。コードのこの行で追跡できないことが 1 つだけ残っています。それが、値 5 を渡すことを243呼び出した場合の最終的な戻り値です。これは、rec()痕跡:

n: 4 *3: 12
n: 3 *3: 9
n: 2 *3: 6
n: 1 *3: 3
n: 0 *3: 0
n: 1 *3: 3

result: 243

正しい?243の結果はどのように得られますか?

int rec(int n)
{
if (n == 0)
    return 1;


return 3 * rec(n-1);
}
4

3 に答える 3

8

あなたの関数は3^nを計算します。

n-1 回の呼び出しの結果に数値 3 が乗算されます。

f(n) = 3 * f(n-1) ;

f(0) = 1;

f(1) = 3 * f(0) = 3 * 1 = 3;

f(2) = 3 * f(1) = 3 * 3 = 9;

f(3) = 3 * f(2) = 3 * 3 * f(1) = 3 * 3 * 3 = 27

. . .

f(5) = 3 * 3 * 3 *3 * 3 = 243

于 2012-12-04T11:56:49.903 に答える
2

この関数は計算します

3^n where n >= 0

5を渡すと、3 * 3 * 3 * 3 * 3 *(1)=243が計算されます。

于 2012-12-04T11:59:39.150 に答える
-1

3、4 回の乗算のみを行います。

return 3 * rec(n-1);

私はあなたがこのようなものが欲しかったと思います:

return n * rec(n-1);
于 2012-12-04T11:56:42.987 に答える