誰かがこの再帰の後ろに私にロジックを説明することができます

クリスAgbemabiese:
public int bunnyEars(int n) {
    if (n < 0) {
        throw new IllegalArgumentException();
    }
    if (n == 0) {
        return n;
    }
    if (n % 2 == 1)
       return 2 + bunnyEars(n - 1);

   return 3 + bunnyEars(n - 1);
}

誰かがどのように説明することができbunnyEars(2) = 5 、またそれがどのように動作するかと?

User093203920:

数が場合はn0未満であることでも明らかなように、IllegalArgumentExceptionが、スローされます。

if (n < 0) {
   throw new IllegalArgumentException();
}

だから、私たちは知っているn、常に0以上であることを想定しています。また、メソッドが返すときになっていることを知っているnことでも明らかなように、0に等しいです。

if (n == 0) {
    return n;
 }

だから、おそらく、この方法は、public int bunnyEars(int n)ゼロ以上、およびまでの整数の追加を開始します番号を取るnゼロです。

我々は2つの異なる可能なシナリオを取るように見るnのゼロよりも大きくし、それらと何かの操作を行います。

if (n % 2 ==1)
   return 2 + bunnyEars(n-1);
return 3 + bunnyEars(n -1); //else

どうここで起こっているがされているn%2(2分周毎に奇数の整数一つの残りの部分を持っているので数が奇数であることを意味する)1に等しい場合、本方法は、再帰的に電流と呼ばれるnマイナス1、最終復帰への整数が2インクリメントされます。

数が奇数でない(したがって、偶数である)、同じことが起こっている、しかし、もし最終の整数で3インクリメント戻ります。

だから、あなたの例ではbunnyEars(2)、我々は2のnがゼロより正と大きいの両方であるので、エラーがスローされないと、この方法は再帰なしで返さないことがわかります。2が偶数(2%2が0である)であるので、第二にreturn使用されます。この手段は、3 + bunnyEars(1)が呼び出されること。

1も0より大きいので、我々は再び再帰的な方法に進みます。1が奇数(1%2が1である)であるので、最初の再帰リターンが呼び出されます。この手段は、我々は2 + bunnyEars(0)を呼び出します。

nが0であるので今、return nif文からは使用されています:

if (n == 0) {
    return n;
 }

最初のラウンドで私達は3つインクリメント返すために、最終的な整数を持っていたし、結果は5であるように、第2の時間にそれは5の合計のために、2インクリメントされました。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=21085&siteId=1