如何绘制方法的分解和组成?

问题描述

考虑以下代码片段

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)的值是什么?讨论并显示一个截图,证明您的答案。

here is the screenshot

解决方法

a。画出fun(2,4)的分解与组成

您的问题听起来像是一项家庭作业,我不想为您完成工作。

也就是说,我可以为另一个示例绘制分解/组成图,以使您有所了解。

以下是fun(0,3)的图表:

Decomposition/composition diagram

其中黑色箭头表示分解,而蓝色箭头表示fun(0,3)组成。 / p>

分解过程(黑色):

  1. 绘制fun(0,3)

  2. 通过检查代码,您可以看到,要计算fun(0,3),首先必须计算fun(0,2),因此绘制fun(0,2)

  3. 要计算fun(0,2),首先必须计算fun(0,1),因此绘制fun(0,1)

组成过程(蓝色):

  1. fun(0,1)返回a,或者您返回0

  2. 您现在可以计算fun(0,2) = a + fun(0,1) = 0 + 0 = 0

  3. 最后,您可以计算fun(0,3) = a + fun(0,2) = 0 + 0 = 0


b。 fun(2,0)的值是什么?讨论并显示屏幕截图 证明您的答案。

如您所见,这种特殊情况会产生StackOverflow错误。如果尝试为这种情况绘制分解/组成图,最终将得到一个无尽的分支。