4

これはハードウェアの割り当てです。私が望む答え/出力は正しいです。理由がわかりません。累乗関数がチェックしている数値と一致する場合、出力が true になるようにします。これらの例では正しい答えが得られますが、この再帰関数がどのように機能しているかはわかりません。

この関数のelseでは、 base * 関数自体を言っています。それは何を表していますか?どうすればbase * power(base, exponent - 1);計算できますか?ぐるぐる回って最後に終わるんじゃないの?

console.log(power(2,4) === 16);
console.log(power(2,3) === 8);
console.log(power(2,2) === 4);

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

4 に答える 4

5

関数 power は整数を返すため、関数が返すときはbase * <some_integer>完全に有効な式です。これらをトレースする最良の方法は、ペンと紙を使用することです。

power(2,4) の呼び出しスタック:

power(2, 4) = 2 * power(2, 3)
power(2, 3) = 2 * power(2, 2)
power(2, 2) = 2 * power(2, 1)
power(2, 1) = 2 * power(2, 0)
power(2, 0) = 1 <--base case

今あなたがしなければならないことは、コールスタックの値を代入することだけです

power(2, 4) = 2 * 8 = 16
power(2, 3) = 2 * 4 = 8
power(2, 2) = 2 * 2 = 4
power(2, 1) = 2 * 1 = 2
于 2012-04-08T04:15:22.817 に答える
0

power(2,4)の例では、次のようになります。

  • 4!= 0なので、elseが実行され、2 * power(2,3)が実行されます。
  • 3!= 0なので、elseが実行され、2 * power(2,2)が実行されます。
  • 2!= 0なので、elseが実行され、2 * power(2,1)が実行されます。
  • 1!= 0なので、elseが実行され、2 * power(2,0)が実行されます。
  • 最後に0==0なので、1を返し、別の再帰呼び出しを実行しません。

したがって、呼び出しを経由して2 * power(2,0)に到達します。これは、power(2,0)== 1であることがわかります。これは2として返されます。次に、2 * power(2,1)に戻り、 [2 * power(2,0)]なので、power(2,1)==2であることがわかります。これは4として返されます。


パターンを見ますか?そして、2 * power(2,3)== 16に戻るまで続きます。これは、[power(2,2)* power(2,1)* power(2 、0)*1]。これがお役に立てば幸いです。

于 2012-04-08T04:28:40.363 に答える
0

Javascript の構文的なシュガー宣言スタイルを使用して関数を記述すると役立つ場合があります。

console.log(power(2,4) === 16);
console.log(power(2,3) === 8);
console.log(power(2,2) === 4);

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

必要に応じて、行を追加することもできます

console.log("power("+base+", "+exponent+")");

関数の先頭で、再帰呼び出しシーケンスを監視します。

于 2012-04-08T04:13:11.227 に答える
0

0指数は、定数を返す場所と等しくなるまで再帰呼び出しごとに減少し、関数は再帰的ではなく1なります。

jsFiddle .

また、これが宿題でない場合は、ありますMath.pow():)

于 2012-04-08T04:16:11.753 に答える