public static int exponent(int baseNum, int exp) {
if (exp == 0) return 1;
else return baseNum * exponent(baseNum, --exp);
}
我不明白这两个参数在这个递归方法中是如何工作的。是否将baseNum 值转换为指数乘以baseNum 然后返回?那么第二个参数(exp)也会做同样的事情,直到达到基本情况? 如果你能帮助我想象或分解它是如何工作的,那就太好了!谢谢。
最佳答案
这是使用 2 和 4 作为参数调用此递归方法的示例~(:
- 指数(2, 4)
- => 2 * 指数(2, 3)
- => 2 * 指数(2, 2)
- => 2 * 指数(2, 1)
- => 2 * exponent(2, 0) <- exp == 0,返回 1,因此不再进行递归调用
- => 2 * 指数(2, 1)
- => 2 * 指数(2, 2)
- => 2 * 指数(2, 3)
所以要备份链条:
- 2 * (1) => 2
- 2 * (2) => 4
- 2 * (4) => 8
- 2 * (8) => 16
此特定方法的一个问题是,如果您在第一次调用时为 exp 传递负值,您将获得无限递归。最好检查 (exp <= 0) 而不是
关于java - 递归参数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36266325/