我写了这个递归方法:
public class Main {
public static int p(int x, int n) {
if (n == 0)
return 0;
else if (n % 2 == 0)
return p(x, (n / 2)) * p(x, (n / 2));
else
return x * p(x, (n - 1 / 2)) * p(x, (n - 1 / 2));
}
public static void main(String[] args) {
System.out.println(Main.p(2, 3));
}
}
然而,在运行它时,我得到一个StackOverflowError - 我看了这个,似乎递归“太深”,堆栈无法处理它。但我很困惑,因为当n = 0时,递归应该停止,因为这是一个基本情况。我该如何纠正这个问题?
答案 0 :(得分:0)
您需要使用正确的括号,即确保括号按照您的要求执行。
public class Main
{
public static int p(int x, int n)
{
if (n == 0)
return 1;
else if (n % 2 == 0)
return p(x, (n / 2)) * p(x, (n / 2));
else
return x * p(x, ((n - 1) / 2)) * p(x, ((n - 1) / 2));
}
public static void main(String[] args)
{
System.out.println(Main.p(2, 3));
}
注意:注意括号中的(n - 1)。另请注意,当n == 0时,我们返回1,因为0的幂是1的任何数字。
另外,你最好不要静态地调用这个方法(技术上很简单' slopppy programming')。
最好将类实例化为对象并以此方式调用方法。