在这里,您实际上使用相同的值对 power 方法进行了两次调用:
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)