递归参数如何工作?

时间:2016-03-28 16:19:41

标签: java

public static int exponent(int baseNum, int exp) { 
     if (exp == 0) return 1; 
     else return baseNum * exponent(baseNum, --exp); 
}

我不明白这两个参数在这种递归方法中是如何工作的。是否将baseNum值转换为exponent乘以baseNum然后返回?那么第二个参数(exp)会一直到达基本情况吗? 如果你能帮助我想象或分解这是如何工作的那将是伟大的!谢谢。

4 个答案:

答案 0 :(得分:2)

以下是使用2和4作为参数〜(:

)的这种递归方法的示例调用
  • 指数(2,4)
    • => 2 *指数(2,3)
      • => 2 *指数(2,2)
        • => 2 *指数(2,1)
          • => 2 *指数(2,0)< - exp == 0,返回1,因此不再有递归调用

所以重新开始链条:

  • 2 *(1)=> 2
  • 2 *(2)=> 4
  • 2 *(4)=> 8
  • 2 *(8)=> 16

这个特殊方法的一个问题是,如果你在第一次调用时传入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(当exp0时,我们返回1)。因此,我们可以将其写为return 2*2*2*1;

所以我们想要计算2^3并且方法自己调用三次,并且每次都将2与自身相乘,最后返回2*2*2*1的答案。

不要忘记0^0 不是 1。如果您致电exponent(0,0),您将收到错误的1