gpt4 book ai didi

java - 减少对pow递归方法的递归调用?

转载 作者:行者123 更新时间:2023-12-01 07:40:45 29 4
gpt4 key购买 nike

有一个关于如何减少 pow 方法的 self 实现的递归调用量的问题。这是我写的,可以改进吗?

public static int pow(double a, int b) {
boolean isNegative = false;

if(b < 0) {
isNegative = true;
}

if(b == 0) {
return 1;
}
else if(b == 1) {
return (isNegative ? (1 / b) : b);
}

return (isNegative ? ((1 / b) * (1 / b) * pow(a, b + 2)) : (b * b * pow(a, b - 2)));
}

最佳答案

是的,可以改进。

这样想:

  • 如果 b 是偶数,则 a^b = a^(b/2) * a^(b/2)。
  • 如果 b 为奇数,则 a^b = a^(b/2) * a^(b/2) * a(其中/表示整数除法)。

代码(大脑编译、咖啡尚未开始等):

public static double pow(double a, int b) {
if (b < 0)
return 1 / pow(a, -b);
if (b == 0)
return 1;
double halfPow = pow(a, b/2);
if (b % 2 == 0)
return halfPow * halfPow;
else
return halfPow * halfPow * a;
}

这为您提供了 O(log b) 递归调用,而不是您的解决方案中的 O(n)。

关于java - 减少对pow递归方法的递归调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288389/

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