问题描述
考虑以下代码片段
public int fun(int a,int b) {
if (b == 1)
return a;
else
return a + fun(a,b - 1);
}
a。画出fun(2,4)的分解与组成
b。 fun(2,0)的值是什么?讨论并显示一个截图,证明您的答案。
解决方法
a。画出fun(2,4)的分解与组成
您的问题听起来像是一项家庭作业,我不想为您完成工作。
也就是说,我可以为另一个示例绘制分解/组成图,以使您有所了解。
以下是fun(0,3)
的图表:
其中黑色箭头表示分解,而蓝色箭头表示fun(0,3)
的组成。 / p>
分解过程(黑色):
-
绘制
fun(0,3)
-
通过检查代码,您可以看到,要计算
fun(0,3)
,首先必须计算fun(0,2)
,因此绘制fun(0,2)
-
要计算
fun(0,2)
,首先必须计算fun(0,1)
,因此绘制fun(0,1)
组成过程(蓝色):
-
fun(0,1)
返回a
,或者您返回0
-
您现在可以计算
fun(0,2) = a + fun(0,1) = 0 + 0 = 0
-
最后,您可以计算
fun(0,3) = a + fun(0,2) = 0 + 0 = 0
b。 fun(2,0)的值是什么?讨论并显示屏幕截图 证明您的答案。
如您所见,这种特殊情况会产生StackOverflow
错误。如果尝试为这种情况绘制分解/组成图,最终将得到一个无尽的分支。