java递归如何在具有2个参数的方法中工作

时间:2019-06-11 12:21:11

标签: java recursion

public static int calcValue(int num1, int num2)
{
 if (num1 <= num2)
 return 0;
 else
 return calcValue(num1-1, num2) + 1;
}

calcValue(5,1)生成4作为输出

calcValue(6,3)生成3作为输出

我遇到了另一个递归问题。我也尝试运行此程序,但无法理解代码。

public static int guessProg( int num)
 {
 if (( num==0) || (num==1))
 return num;
 else
 return guessProg(num-1) + guessProg(num-2);
 }

guessProg (3)生成2

guessProg (12)生成144

有人可以帮我理解上面代码中发生的递归调用

我已经运行了代码。我需要有关如何生成我得到的输出的解释。

1 个答案:

答案 0 :(得分:4)

正如您所说,该方法计算两个输入数字的差,但是它假定该差为正(即第一个数字大于或等于第二个数字),因为它不能返回负输出。 / p>

如果该方法接受两个相等的数字,则返回0,然后递归结束。

否则,它返回calcValue(num1-1, num2) + 1,等于返回num1-1 - num2 + 1,等于num1 - num2

例如

calcValue(5,2) 

返回

calcValue(4,2) + 1

calcValue(4,2)返回

calcValue(3,2) + 1

calcValue(3,2)返回

calcValue(2,2) + 1

calcValue(2,2)返回

0

现在每次递归调用的结果都返回给调用者,所以

calcValue(2,2) + 1 becomes 0 + 1 == 1

calcValue(3,2) + 1 becomes 1 + 1 == 2

calcValue(4,2) + 1 becomes 2 + 1 == 3

这是原始调用的结果

calcValue(5,2)