0

else ブロックを理解するのに苦労しています。基本パラメーターを指数パラメーターに引き上げることになっていることはわかっています。しかし、それはどのように機能しますか?

var power = function(base, exponent){

    if (exponent === 0){
        return 1;
    }
    else{
        return base * power(base, exponent - 1);
    }

};

power(2, 2);
4

2 に答える 2

1

入力用power(2/*base*/,2/*exponent*/)

繰り返し1:エントリの :2/*exponent*/と等しくないため0、その部分を実行しelseます。

したがって、それは戻るはずです2 * power(2,(2-1)/*which is 1*/)

反復 2power() : 繰り返しますが、引数を持つ関数の呼び出しが部分的2/*base*/ and 1/*exponent*/ power(2,1)に実行されますelse:returns 2 * power(2,0)

反復 3 : ここでもpower()、引数を持つ関数の呼び出しがあります2/*base*/ and 0/*exponent*/

exponent は 0 であるため、if 部分を実行して 1 を返し、2 を返す 2 番目の反復を完了します。4 を返す最初の反復を完了します。

于 2012-10-13T22:23:36.223 に答える
1
power(base, exponent - 1)

は本当にちょうどbase * power(base, exponent - 1)です。しかし、これらの関数呼び出しで何が起こっているかを考え続けると、次のことがわかります。

base * ... pow(base, exponent - n)

試してみましょうpower(2, 4)

2 * (2 * (2 * (2 * (1))))

2 * power(2, 4 - 1);

power(2, 4 - 1)に単純化します

2 * power(2, 3 - 1)

これは次のように単純化されます

2 * power(2, 2 - 1)

これは次のように単純化されます

2 * power(2, 1 - 1)

そして、それは次のように単純化さ1exponentます0。すべてをまとめると、次のようになります。

2 * 2 * 2 * 2 * 1
于 2012-10-13T22:26:12.147 に答える