【问题标题】:Calculating Time Complexity of recursice function计算递归函数的时间复杂度
【发布时间】:2023-09-20 23:31:01
【问题描述】:

所以我有以下代码,但我不知道如何获得它的递归关系。我终于需要计算代码的时间复杂度了。

int countChangeRec(int amount, array<int, 5>coins, int n)
{
    if(amount == 0)
        return 0;
    if((amount > 0 && n < 0) || (amount < 0))
        return INT_MAX;


    if(amount < coins[n-1])
        return countChangeRec(amount, coins, n-1);

    return min(countChangeRec(amount, coins, n-1), 
        amount / coins[n-1]+ countChangeRec(amount%coins[n-1], coins, n));
}

提前感谢您提供有关如何执行此操作的任何建议。

【问题讨论】:

  • 也将不胜感激任何优化。需要使用递归来解决。我知道 DP 解决方案,但上述方法中的任何优化都将不胜感激。
  • 这可能很明显,但请添加第一次调用该函数的方式。
  • 另外,我可能错了,但我认为当n 为(或变为)零且amount 为非零时,您的代码存在错误,因为您访问了coins[-1]。跨度>

标签: c++ algorithm recursion time-complexity recurrence


【解决方案1】:

您的代码不能解决问题。如果你想计算硬币的最小数量,这里有一个打破你的解决方案的例子

coins = {1,9,10}
amount = 37

您的解决方案返回答案 5,但正确答案是 4

9*3 + 1*10

【讨论】: