Recursion 确定递归程序的工作/时间复杂性

Recursion 确定递归程序的工作/时间复杂性,recursion,big-o,time-complexity,Recursion,Big O,Time Complexity,嗨,我很难理解我大学课程中递归程序的复杂性,几天后就要期末考试了。语言是miranda,但我主要无法理解如何确定跟踪的每个级别上的“工作量”。有人能解释一下在前面的测试示例中答案是如何形成的吗?提前谢谢 Example Trace p9 [1,2,3,4,5,6] => 3:[2,3,4,5,6] ++ p9 [2,3,4,5,6] | | 3:[3,

嗨,我很难理解我大学课程中递归程序的复杂性,几天后就要期末考试了。语言是miranda,但我主要无法理解如何确定跟踪的每个级别上的“工作量”。有人能解释一下在前面的测试示例中答案是如何形成的吗?提前谢谢

Example Trace
p9 [1,2,3,4,5,6]

=> 3:[2,3,4,5,6] ++ p9 [2,3,4,5,6]
                           |
                           |
               3:[3,4,5,6] ++ p9 [3,4,5,6]
                                    |
                                    |
                          3:[4,5,6] ++ p9 [4,5,6]
                                              etc.
a) 如果输入的长度为n,则计算中有n-1个级别,因为每次递归调用都会从列表中删除一个元素,直到列表的长度为1为止

b) 第一级的功与n+1成正比 因为++运算符取决于 最左边的列表。 下一级的功与n成正比 下一级的功与n-1成正比 等,直到最后一次通话时,工作是2个单位

c) 因此,水平上的平均功是成比例的 至n/2

d) 因此,总功与n^2成正比

e) 因此,复杂度为O(n^2)