【发布时间】:2017-03-28 22:08:37
【问题描述】:
我最近一直在研究递归,这很令人困惑。我正在尝试编写一个 java 程序,它使用递归来生成一个基数到一个幂的结果,它也有一个基数有多少指数的高度。例如,底数为 2 的幂为 3,高度为 3:
(((2^3)^3)^3)
这是我的(非常有缺陷的)代码:
public static void main(String[] args) {
System.out.println(exponentWithHeight(2, 2, 3));
}
public static int exponentWithHeight(int base, int power, int height) {
if (power < 0 || height < 0) {
throw new IllegalArgumentException("Check input values.");
}
if (power == 0) {
return 1;
} else {
return (base * height * exponentWithHeight(base, power - 1, height - 1));
}
}
我真的不确定如何获得我想要的输出;正如我所说,这对我来说真的很令人困惑和新奇。有人可以帮忙解释一下如何去做吗?
【问题讨论】:
-
你的预期输出是什么,你会得到什么?调试时发现了什么?
-
所以我在调用 exponentWithHeight(2, 2, 3) 方法时的预期输出是 256。相反,我得到了 24。当我调试它时,一切运行良好。
-
“一切运行完美”你是什么意思?调试时得到256?或者你没有得到任何错误? (后者是没有意义的,如果你没有得到正确的结果,你显然有错误)
-
请记住,您可以通过将一系列指数相乘来简化它们。所以
(((2^3)^3)^3) = 2 ^ (3 * 3 * 3) = 2 ^ (3 ^ 3)- 有效地制作你的公式f(n, exp, height) = n ^ (exp ^ height)。可能能够利用它来简化您提出的任何解决方案。 -
这很有帮助,谢谢!没想到是这样的。