gpt4 book ai didi

java - 在递归计算幂时我不理解我的方法的输出

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:58:30 25 4
gpt4 key购买 nike

当我尝试递归计算 2^8 时,我没有看到如何使用此方法 31 次。

此方法是否以 O(logN) 复杂度计算幂?

当我运行它时,输出是:

0
1
2
3
4
5
...
29
30
2^8 is: 256

代码

private static int power(int x, int y)
{
System.out.println(step++);

if (y == 0)
return 1;

return power(x, y/2) * power(x, y/2);
}

最佳答案

这里实际上是用相同的值对 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)

关于java - 在递归计算幂时我不理解我的方法的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13082720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com