递归参数是如何工作的?

ljo96ir5  于 2021-07-13  发布在  Java
关注(0)|答案(4)|浏览(200)
public static int exponent(int baseNum, int exp) { 
     if (exp == 0) return 1; 
     else return baseNum * exponent(baseNum, --exp); 
}

我不明白这两个参数在这个递归方法中是如何工作的。是否将basenum值转换为指数乘以basenum然后返回?然后第二个参数(exp)执行相同的操作,直到它到达基本情况?如果你能帮助我想象或分解这是如何工作,那太好了!谢谢您。

t1qtbnec

t1qtbnec1#

下面是一个使用2和4作为参数()的递归方法调用示例:
指数(2,4)
=>2指数(2,3)
=>2
指数(2,2)
=>2指数(2,1)
=>2
exponent(2,0)<-exp==0,返回1,因此不再递归调用
所以在链条的后面工作:
2 * (1) => 2
2 * (2) => 4
2 * (4) => 8
2 * (8) => 16
这个特殊方法的一个问题是,如果在第一次调用时为exp传递负值,则会得到无限递归。最好检查(exp<=0)

sf6xfgos

sf6xfgos2#

递归方法 exponent() 如果第二个参数 exp 不是0,并在进一步计算中使用返回的结果。每次通话, 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
xwbd5t1u

xwbd5t1u3#

当你第一次调用这个方法时,比如说指数(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。

n9vozmp4

n9vozmp44#

exponent() 是一种计算数字的方法( baseNum )另一个数字的力量( exp )只需将数字与自身相乘 exp 次数。
如果指数为 0 ,然后它将返回 1 因为每一个0次方的整数都等于1(除了0本身,因为某些原因它没有被覆盖)。
假设我们要计算 2^3 . 我们将通过编写 exponent(2,3) . 发生的情况如下: return 2*exponent(2,2);exponent(2,2) 是同一件事 return 2*exponent(2,1); ,我们可以这样写:
return 22exponent(2,1); exponent(2,1) 是同一件事 2*exponent(2,0) 哪个是 2*1 (何时 exp0 ,我们回来 1 ). 所以我们可以把它写成 return 2*2*2*1 ;
所以我们想计算 2^3 这个方法自己调用了三次 2 每次都带着自己的答案终于回到了 2*2*2*1 .
别忘了 0^0 不是 1 . 如果你打电话 exponent(0,0) 你会得到 1 这是错误的。

相关问题