编写并解决计算此代码中乘法次数的重复次数?

时间:2013-10-08 02:57:34

标签: c++ math big-o time-complexity recurrence

设M(n)是函数fct所做的乘法数。

     //precondition: n>0
     int fct (const int A[], int n) {
          if (n==1)
             return A[0]*A[0];
          else return A[n-1] * fct(A,n-1) * A[n-1];
     }

写入M(n)的递归关系,其中n是数组中元素的数量

求解递归关系,以n

得到M(n)

将第2部分的结果表达式写成大O表示法

所以这是一个测验,我有答案键,但不太确定如何计算,M(n)= 2n-1与O(n)..我不知道这是如何确定的,可以有人解释?感谢

1 个答案:

答案 0 :(得分:1)

让我们来看看每个电话的作用。每次通话,当n> 1,

  • 恰好两次乘法,然后
  • 对大小为n - 1
  • 的问题进行递归调用

因此,我们可以将重现写为

  • M(1)= 1
  • M(n)= 2 + M(n-1)

如果使用迭代方法,您会注意到这种模式:

  • M(1)= 1
  • M(2)= M(1)+ 2 = 3
  • M(3)= M(2)+ 2 = 5
  • M(4)= M(3)+ 2 = 7
  • ...
  • M(n)= 2n - 1

现在你有了这个,你可以渐近地写成M(n)=Θ(n)。

希望这有帮助!