public static int exponent(int baseNum, int exp) {
if (exp == 0) return 1;
else return baseNum * exponent(baseNum, --exp);
}
我不明白这两个参数在这种递归方法中是如何工作的。是否将baseNum值转换为exponent乘以baseNum然后返回?那么第二个参数(exp)会一直到达基本情况吗? 如果你能帮助我想象或分解这是如何工作的那将是伟大的!谢谢。
答案 0 :(得分:2)
以下是使用2和4作为参数〜(:
)的这种递归方法的示例调用所以重新开始链条:
这个特殊方法的一个问题是,如果你在第一次调用时传入exp的负值,你将获得无限递归。最好检查(exp< = 0)而不是
答案 1 :(得分:1)
如果第二个参数exponent()
不为0,则递归方法exp
会调用自身,并在进一步计算中使用返回的结果。通过每次通话,exp
减少1,所以最后(如果最初>> 0)它符合终端条件。
一个简单的序列图来说明:
exponent(2, 3)
| ----------> exponent(2, 2)
| | ----------> exponent(2, 1)
| | | ----------> exponent(2, 0)
| | | <---------- returns 1 // terminal condition
| | <---------- returns 2 * 1 = 2
| <---------- returns 2 * 2 = 4
returns 2 * 4 = 8
答案 2 :(得分:0)
当你第一次调用方法时,比如指数(10,5),这意味着递归方法会被调用5次。
在调用递归方法之前,每次exp减1。参数传递给方法。它们是局部变量,因此它们只存在于方法中。
指数(10,5) 将致电
else return 10 * exponent(10,4)
然后
else return 10 * exponent(10,3)
然后
else return 10 * exponent(10,2)
...等
直到exp == 0。
答案 3 :(得分:0)
exponent()
是一种计算数字(baseNum
)与另一个数字(exp
)的幂次数的方法,只需将数字乘以其自身exp
次数即可
如果指数为0
,那么它将返回1
,因为0的幂的每个整数等于1(除了0本身,由于某种原因没有涵盖)。 / p>
我们说我们想要计算2^3
。我们将通过编写exponent(2,3)
来调用该方法。会发生以下情况:
return 2*exponent(2,2);
由于exponent(2,2)
与return 2*exponent(2,1);
相同,我们可以将其写为以下内容:
return 2*2*exponent(2,1);
exponent(2,1)
与2*exponent(2,0)
相同,即2*1
(当exp
为0
时,我们返回1
)。因此,我们可以将其写为return 2*2*2*1
;
所以我们想要计算2^3
并且方法自己调用三次,并且每次都将2
与自身相乘,最后返回2*2*2*1
的答案。
不要忘记0^0
不是 1
。如果您致电exponent(0,0)
,您将收到错误的1
。