简单递归算法的复杂性估计

时间:2015-09-29 20:55:10

标签: scala time-complexity

我在Scala上写了一段代码。现在我想估计时间和内存的复杂性。

问题陈述

给定正整数n,找到总和为n的最小正方形数(例如,1,4,9,16 ......)。

例如,给定n = 12,返回3,因为12 = 4 + 4 + 4;给定n = 13,返回2,因为13 = 4 + 9

我的代码

def numSquares(n: Int): Int = {
  import java.lang.Math._

  def traverse(n: Int, ns: Int): Int = {
    val max = ((num: Int) => {
      val sq = sqrt(num)
      // a perfect square!
      if (sq == floor(sq))
        num.toInt
      else
        sq.toInt * sq.toInt
    })(n)

    if (n == max)
      ns + 1
    else
      traverse(n - max, ns + 1)
  }

  traverse(n, 0)
}

我在这里使用递归解决方案。所以恕我直言的时间复杂度是O(n),因为我需要使用递归来遍历数字序列。我对吗?我错过了什么吗?

0 个答案:

没有答案