ここでは、同じ値で power メソッドを 2 回呼び出しています。
return power(x, y/2) * power(x, y/2);
代わりに、次のように記述すれば、半分の呼び出しを行うことができます。
int toReturn = power(x, y/2);
return toReturn * toReturn;
元の例を見ていくと、31 回の呼び出しが行われます。これは、表示されているとおりです (0 から 30)。コードを見て、理由を確認してください。
power(2, 8)
power(2, 4)
power(2, 4)
power(2, 2)
power(2, 2)
power(2, 2)
power(2, 2)
power(2, 1)
power(2, 1)
power(2, 1)
power(2, 1)
power(2, 1)
power(2, 1)
power(2, 1)
power(2, 1)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)
power(2, 0)