如何画一个方法的分解和组合?

How to draw a decomposition and composition for a method?

考虑以下代码片段

public int fun(int a, int b) {
    if (b == 1)
        return a;
    else
        return a + fun(a, b - 1);
}

一个。画出fun(2,4)

的分解&组合

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

here is the screenshot

a. Draw the decomposition & composition of fun(2,4)

你的问题听起来像是家庭作业,我不想为你做这项工作。

也就是说,我可以画 decomposition/composition 图作为另一个例子给你一个想法。

这是 fun(0,3) 的图表:

其中黑色箭头表示分解蓝色箭头表示 fun(0,3).

的组成

分解程序(black):

  1. 绘制fun(0, 3)

  2. 通过检查你的代码,你可以看到为了计算 fun(0, 3),你首先必须计算 fun(0, 2),所以你绘制 fun(0, 2)

  3. 为了计算fun(0, 2),你首先要计算fun(0, 1),所以你画出fun(0, 1)

合成程序(blue):

  1. fun(0, 1) returns 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. What would be the value of fun(2,0)?Discuss and show a screenshot that proves your answer.

如您所见,该特定情况会产生 Whosebug 错误。如果您尝试为这种情况绘制 decomposition/composition 图,您最终会得到一个单一的、无尽的分支。