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
有人可以帮我理解上面代码中发生的递归调用
我已经运行了代码。我需要有关如何生成我得到的输出的解释。
答案 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)